2014-03-07 89 views
0

我有以下類別:C#LINQ到組由對象屬性

public class MyItem 
{ 
    public string Email; 
    public int Value1;  
    public datetime Value2; 
    //etc 
} 

public class MyItems : List<MyItem> {} 

我填充MyItems隨機項目的列表對象。現在我需要將這個列表分成更小的列表,每個列表只包含具有相同'Email'屬性的項目。

這可以使用Linq來實現嗎?

+2

爲什麼你繼承'名單'一類? –

+0

沒有特別的理由。我可能會爲該類添加特定的方法。 –

+3

是的,在LINQ中絕對可以使用'GroupBy'(或等效查詢表達式)來實現。現在,你試過了什麼,發生了什麼? –

回答

1

如果你有List<MyItem>,你可以簡單地使用GroupBy

myItems.GroupBy(x => x.Email).Select(g => g.ToList()); 

這將返回一個IEnumerable<List<MyItem>>

或者你可以使用ToDictionary您可以通過Email訪問組:

myItems.GroupBy(x => x.Email).ToDictionary(x => x.Key, x => x.ToList()); 
0

試試這個

MyItems myItems = new MyItems(); 

//Populate here 

myItems.GroupBy(x => x.Email).Select(group => group.ToList()); 

在這裏,你得到列出的集合,你可以使用

+0

這看起來像使用Linq? –

+2

umm即linq –

+1

@ Ivan-MarkDebono:您可能會混淆表達linq的兩種不同方式。從myItems中選擇'from'選擇blah'類型的語法只是在編譯器執行之前被轉換爲方法語法的糖。 – Chris