Linq Merge 2 Lists to One

时间:2013-04-06 11:20:23

标签: c# .net linq

我有两个列表例如: 1:

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

2:

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

我想要回来的最终名单是:

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

我如何使用Linq完成它?

3 个答案:

答案 0 :(得分:6)

您可以使用Zip方法。

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

然后试试这个:

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 });

答案 1 :(得分:2)

我找到了答案,

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

感谢您帮助我找到答案。

答案 2 :(得分:0)

您应该加入列表。这是一个例子:

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();