Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 列表上的Linq(分组和求和)<;列表<;字符串>&燃气轮机;_C#_.net_Linq - Fatal编程技术网

C# 列表上的Linq(分组和求和)<;列表<;字符串>&燃气轮机;

C# 列表上的Linq(分组和求和)<;列表<;字符串>&燃气轮机;,c#,.net,linq,C#,.net,Linq,我有一个结构: List<List<string>> content 列出内容 这主要是逗号分隔文件中的内容。列表中的第一个元素是表示头的字符串列表。列表中的所有其他元素都是表示值的字符串列表 我正在尝试运行下面这样的查询。其中“code”和“book”是两个标题,我需要按它们2分组,然后按另一个标题求和。这是我的尝试,但当然我不能直接在内容上使用Groupby,因为它是一个列表列表 List<List<string>> content = M

我有一个结构:

List<List<string>> content
列出内容
这主要是逗号分隔文件中的内容。列表中的第一个元素是表示头的字符串列表。列表中的所有其他元素都是表示值的字符串列表

我正在尝试运行下面这样的查询。其中“code”和“book”是两个标题,我需要按它们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())
                       };
                   });
List content=MyContent();
var linqResults=内容
.GroupBy(x=>new{Code=x[“Code”],Book=x[“Book”]})
.选择(g=>
{
还新
{
Book=g.Key.Book,
代码=g.Key.Code,
Total=g.SelectMany(x=>x[“columnToSum”].Sum())
};
});

我同意谢尔盖的意见,但你可以这样做:

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

我建议您将csv文件解析为强类型实体列表(例如订单),而不是字符串列表。然后计算总计将类似于
orders.GroupBy(o=>new{o.Book,o.code})。选择(g=>new{g.Key.Book,g.Key.code,Total=g.Sum(o=>o.ColumnToSum)
{ Book = abc, Code = 1, Total = 15 }
{ Book = cde, Code = 1, Total = 6 }