2

I have two list for example: 1:

 ID | Number
-------------
 01 |   20
 02 |   50
 04 |  2500

2:

 ID | Number
-------------
 01 |   10
 02 |   20
 03 |  1500

And the final list that I want to get back is:

 ID | Number
-------------
 01 |   30
 02 |   70
 03 |  1500
 04 |  2500

How I can done it with Linq?

Hossein Narimani Rad
  • 31,361
  • 18
  • 86
  • 116
Zilberman Rafael
  • 1,341
  • 2
  • 14
  • 45

3 Answers3

6

You can use the Zip method.

public class MyClass
{
    public int Id { get; set; }
    public string Number { get; set; }
}

Then try this:

List<MyClass> fist = new List<MyClass>();     //add some data
List<MyClass> second = new List<MyClass>();   //add some data

fist.Zip(second,
          (i1, i2) => new MyClass() { Id = i1.Id, Number = i1.Number + i2.Number });
Hossein Narimani Rad
  • 31,361
  • 18
  • 86
  • 116
2

I found the answer,

var mergedList = list1.Concat(list2)
                  .GroupBy(person => person.ID)
                  .Select(group => group.Aggregate(
                                     (merged, next) => merged.Merge(next)))
                  .ToList();

Thanks for helping me get the answer.

Zilberman Rafael
  • 1,341
  • 2
  • 14
  • 45
0

You should join the lists. Here is an example:

public class Item
{
    public int ID { get; set; }
    public int Number { get; set; }
}

List<Item> firstList = new List<Item>();
List<Item> secondList = new List<Item>();

List<Item> finalList = firstList.Join(
    secondList,
    item => item.ID,
    item => item.ID,
    (item, item1) => new Item() { ID = item.ID, Number = item.Number + item1.Number }).ToList();
Nikolay Kostov
  • 16,433
  • 23
  • 85
  • 123