基于众多字段的对象组列表

时间:2017-03-11 16:10:01

标签: c# linq list

我在这里找到了很多linq帖子,它们按字段对一个对象进行分组,但是我还没有找到一种方法来通过多个字段对一个对象进行分组。

假设我有一个如下对象:

class Obj
{
    public string field1 {get;set;}
    public string field2 {get;set;}
    public string field3 {get;set;}
}

然后我有一个对象列表,如:

List<Obj> ol = new List<Obj>

Obj obj = new Obj();
obj.field1 = "a1";
obj.field2 = "a2";
obj.field3 = "a3";
ol.Add(obj);

obj.field1 = "a4";
obj.field2 = "a5";
obj.field3 = "a6";
ol.Add(obj);

obj.field1 = "a7";
obj.field2 = "a8";
obj.field3 = "a9";
ol.Add(obj);

obj.field1 = "a1";
obj.field2 = "a2";
obj.field3 = "a3";
ol.Add(obj);

所以现在有一个包含四个对象的列表。我想要的是按所有三个字段对列表进行分组。我知道如何按1字段对列表进行分组,但是在按多个字段分组时我没有运气。因此,我要查找的结果是三个列表,因为字段1,2和3在两个对象中是相同的。

要按一个字段分组,我已完成以下工作正常:

var grouped = obj.GroupBy(u => u.field1);

我正在寻找的是类似下面的语法无效但它是我尝试过的事情之一:

var grouped = obj.GroupBy(u => u.field1 && v => v.field2 && w => w.field3);

如果您按照以下多个字段进行分组,那么在sql中的想法是相同的:

select * from foo group by field1, field2, field3

提前感谢您提供任何帮助

1 个答案:

答案 0 :(得分:1)

如果我已经理解你正在尝试做的事情,你可以尝试:

var grouped = obj.GroupBy(u => new { u.field1, u.field2, u.field3 })