Mar*_*ins 1 c# linq linq-to-objects
鉴于以下结构......
class Foo {
public string Category { get; set; }
public string Code { get; set; }
public int Quantity { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我试图使用Linq按类别和代码汇总这些对象的列表,这样如果我提供以下来源...
List<Foo> foos = new List<Foo>() {
new Foo {Category = @"A", Code = @"B", Quantity = 1},
new Foo {Category = @"A", Code = @"B", Quantity = 2},
new Foo {Category = @"C", Code = @"D", Quantity = 3},
new Foo {Category = @"C", Code = @"D", Quantity = 4}
};
Run Code Online (Sandbox Code Playgroud)
我最终得到一个包含......的列表
Foo {Category = @"A", Code = @"B", Quantity = 3},
Foo {Category = @"C", Code = @"D", Quantity = 7}
Run Code Online (Sandbox Code Playgroud)
(其中Quantity是匹配对象的原始数量的总和).
我知道我需要使用group by子句和Sum()扩展方法的组合,我似乎无法找到正确的组合.
请注意,这个列表后面没有数据库,我只使用对象这样做,因此提取原始列表包括总和不是一个选项.
谢谢.
Jon*_*eet 10
您希望按类别和代码进行分组,因此您需要一个匿名类型 - 然后只需对数量求和.GroupBy如果使用正确的重载,您可以在一次调用中执行此操作:
var query = list.GroupBy(
item => new { item.Category, item.Code },
(key, group) => new Foo { Category = key.Category,
Code = key.Code,
Quantity = group.Sum(x => x.Quantity) });
Run Code Online (Sandbox Code Playgroud)
如果要使用查询表达式执行此操作,可以使用:
var query = from item in list
group item by new { item.Category. item.Code } into items
select new Foo { Category = items.Key.Category,
Code = items.Key.Code,
Quantity = items.Sum(x => x.Quantity) });
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7615 次 |
| 最近记录: |