我有一些代码创建列表的列表。这份名单是这种类型的:将列表的列表投射到IGrouping?
List<List<Device>> GroupedDeviceList = new List<List<Device>>();
但需要在以下类型的返回结果:
IEnumerable<IGrouping<object, Device>>
这是可能通过铸造等,或我应该用我的名单不同的定义列表?
我有一些代码创建列表的列表。这份名单是这种类型的:将列表的列表投射到IGrouping?
List<List<Device>> GroupedDeviceList = new List<List<Device>>();
但需要在以下类型的返回结果:
IEnumerable<IGrouping<object, Device>>
这是可能通过铸造等,或我应该用我的名单不同的定义列表?
如果我理解正确的话你的意图,答案是如下:
var result = GroupedDeviceList
.SelectMany(lst => lst.GroupBy(device => (object)lst));
结果是IEnumerable<IGrouping<object, Device>>
类型,其中对象是对您的List<Device>
的参考。
IGrouping<T1,T2>
通常是通过LINQ GroupBy
查询创建的。
你是如何填充GroupedDeviceList
?你是在手动做还是从.GroupBy
的结果转换它?
你可以进行做类似的事情再次分组:
// IEnumerable<IGrouping<TWhatever, Device>>
var reGroupedList =
GroupedDeviceList
.SelectMany(innerList => innerList.GroupBy(device => device.Whatever));
这将返回一个IEnumerable
@Thomas当然应该使用'SelectMany',答案更新。谢谢。 – 2010-09-02 09:10:46
。假定每一个非空列表的内容应组成一组...
IEnumerable<IGrouping<object, Device>> query =
from list in lists
from device in list
group device by (object)list;
什么是你的分组的关键?设备的属性? – 2010-09-02 08:49:43