【发布时间】:2014-02-14 21:12:42
【问题描述】:
我有一个结构:
List<List<string>> content
这基本上是逗号分隔文件的内容。列表中的第一个元素将是表示标题的字符串列表。列表中的所有其他元素将是表示值的字符串列表。
我正在尝试运行如下查询。其中“代码”和“书”是两个标题,我需要按它们 2 分组并按另一个标题求和。这是我的尝试,但我当然不能直接在内容上使用 Groupby,因为它是一个列表列表。
List<List<string>> content = MyContent();
var linqResults = content
.GroupBy(x => new { Code = x["code"], Book = x["book"] })
.Select(g =>
{
return new
{
Book = g.Key.Book,
Code = g.Key.Code,
Total = g.SelectMany(x => x["columnToSum"].Sum())
};
});
【问题讨论】:
-
我建议您将 csv 文件解析为强类型实体列表(例如订单),而不是字符串列表。然后计算总数看起来像
orders.GroupBy(o => new { o.Book, o.Code }).Select(g => new { g.Key.Book, g.Key.Code, Total = g.Sum(o => o.ColumnToSum) })