2010-09-02 52 views
1

我有一些代码创建列表的列表。这份名单是这种类型的:将列表的列表投射到IGrouping?

List<List<Device>> GroupedDeviceList = new List<List<Device>>(); 

但需要在以下类型的返回结果:

IEnumerable<IGrouping<object, Device>> 

这是可能通过铸造等,或我应该用我的名单不同的定义列表?

+0

什么是你的分组的关键?设备的属性? – 2010-09-02 08:49:43

回答

2

如果我理解正确的话你的意图,答案是如下:

var result = GroupedDeviceList 
     .SelectMany(lst => lst.GroupBy(device => (object)lst)); 

结果是IEnumerable<IGrouping<object, Device>>类型,其中对象是对您的List<Device>的参考。

1

IGrouping<T1,T2>通常是通过LINQ GroupBy查询创建的。

你是如何填充GroupedDeviceList?你是在手动做还是从.GroupBy的结果转换它?

你可以进行做类似的事情再次分组:

// IEnumerable<IGrouping<TWhatever, Device>> 
var reGroupedList = 
    GroupedDeviceList 
    .SelectMany(innerList => innerList.GroupBy(device => device.Whatever)); 
+0

这将返回一个IEnumerable >>' – 2010-09-02 09:00:38

+0

@Thomas当然应该使用'SelectMany',答案更新。谢谢。 – 2010-09-02 09:10:46

1

。假定每一个非空列表的内容应组成一组...

IEnumerable<IGrouping<object, Device>> query = 
    from list in lists 
    from device in list 
    group device by (object)list;