Linq GroupBy具有List <list <string>&gt; </list <string>类型的多个列

时间:2013-03-08 18:24:34

标签: c# linq group-by

我不知道我应该用什么语法来制作分组,多列使用索引。

假设我有这样的结构:

    var listToGroupBy = new List<List<string>>
        {
            new List<string> {"a", "b", "c"},
            new List<string> {"a", "b", "c"},
            new List<string> {"d", "k", "c"},
            new List<string> {"d", "z", "c"}
        };

接下来我想分组第1和第3项。我想使用类似下面的语法,但到目前为止我没有成功。

var groupByResult = listToGroupBy.GroupBy(c => new { c[0], c[2] });

2 个答案:

答案 0 :(得分:3)

您可能只需要以匿名类型命名字段:

var groupByResult = listToGroupBy.GroupBy(c => new { c0 = c[0], c3 = c[3] });

答案 1 :(得分:1)

要详细说明道格拉斯的回答,如果不使用点符号,则需要明确命名字段。

当您使用点表示法时,Linq可以根据属性的名称找出列的名称。但是因为你正在使用数组索引,所以它不知道该命名它。

因此,在下面的示例中,Linq会知道使用SomethingSomethingElse作为字段名称。

var groupByResult = listToGroupBy.GroupBy(c => new {c.Something, c.SomethingElse});

就像道格拉斯所说,你可以通过命名你的字段来获得与点符号相同的结果:

var groupByResult = listToGroupBy.GroupBy(c => new { Something = c[0], SomethingElse = c[3] });