使用LinQ总结属性值

时间:2018-04-13 01:38:09

标签: c# linq

我有一个名为Product:List

的自定义对象列表
class Product
{
    string Key1 {get; set;}
    string Key2 {get; set;}
    int Count1 {get; set;}
    int Count2 {get; set;}
}

我正在组合多个产品列表,我需要创建一个新列表,其中包含每个Count属性的总和值。 例如,

List 1:
"Key1", "Key2", 1, 2
"Key2", "Key3", 3, 4

List 2:
"Key1", "Key2", 5, 6
"Key2", "Key3", 7, 8

所以我的新名单应该是:

New List:
"Key1", "Key2", 6, 8
"Key2", "Key3", 10, 12

有人可以帮我吗?

感谢。

2 个答案:

答案 0 :(得分:2)

你可以这样做

pepperoni

<强>输出

Demo Here

peporini

其他资源

List.AddRange

  

将指定集合的​​元素添加到结尾   列表。

Enumerable.GroupBy Method (IEnumerable, Func, Func)

  

根据指定的键对序列的元素进行分组   选择器功能并使用a为每个组投影元素   指定的功能。

Enumerable.Concat Method (IEnumerable, IEnumerable)

  

连接两个序列。

答案 1 :(得分:0)

 List<Product> lst1 = new List<Product>();
 List<Product> lst2 = new List<Product>();

 lst1.Add(new Product() {Key1 = "K1",Key2 ="K2", Count1 =1, Count2=2 });
 lst1.Add(new Product() { Key1 = "K2", Key2 = "K3", Count1 = 3, Count2 = 4 });

 lst2.Add(new Product() { Key1 = "K1", Key2 = "K2", Count1 = 5, Count2 = 6});
 lst2.Add(new Product() { Key1 = "K2", Key2 = "K3", Count1 = 7, Count2 = 8 });
// Way 1
 var l = lst1.Join(lst2, l1 => l1.Key1, l2 => l2.Key1, 
                (lt1, lt2) => new Product { Key1 = lt1.Key1, Key2 = lt1.Key2, Count1 = lt1.Count1 + lt2.Count1, Count2 = lt1.Count2 + lt2.Count2 } ).ToList() ;

// Way 2
var result = lst1.Join(lst2, x => new { x.Key1, x.Key2 },
                 y => new { y.Key1, y.Key2 }, (x, y) => 
                 new Product { Key1 = x.Key1, Key2 = x.Key2, Count1 = x.Count1 + y.Count1, Count2 = x.Count2 + y.Count2 }).ToList();