我有一个结构:
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())
};
});
答案 0 :(得分:1)
我同意谢尔盖的评论,但你可以这样做:
var content = new List<List<string>>
{
new List<string>{ "book", "code", "columnToSum" },
new List<string>{ "abc", "1", "10" },
new List<string>{ "abc", "1", "5" },
new List<string>{ "cde", "1", "6" },
};
var headers = content.First();
var result = content.Skip(1)
.GroupBy(s => new { Code = s[headers.IndexOf("code")], Book = s[headers.IndexOf("book")]})
.Select(g => new
{
Book = g.Key.Book,
Code = g.Key.Code,
Total = g.Select(s => int.Parse(s[headers.IndexOf("columnToSum")])).Sum()
});
返回:
{ Book = abc, Code = 1, Total = 15 }
{ Book = cde, Code = 1, Total = 6 }