2014-03-07 61 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