2017-03-11 58 views
0

我在這裏發現了很多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

如果我明白你正在嘗試做正確,你可以嘗試:

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

沒錯奏效除了我需要添加u.field3。謝謝 – Maxqueue

+0

相應的編輯代碼以備將來參考。 – stybl

+0

Duplicate:http://stackoverflow.com/questions/847066/group-by-multiple-columns – Mvarta