将列表列表转换为IGrouping?

时间:2010-09-02 08:37:44

标签: c# linq generics linq-to-objects

我有一些代码可以创建列表列表。列表属于这种类型:

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

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

 IEnumerable<IGrouping<object, Device>>

这可以通过强制转换等方式实现,还是应该对我的列表列表使用不同的定义?

3 个答案:

答案 0 :(得分:2)

如果我理解你的意图,答案如下:

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

结果属于IEnumerable<IGrouping<object, Device>>类型,其中object是对List<Device>的引用。

答案 1 :(得分:1)

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

您如何填充GroupedDeviceList?您是手动执行此操作还是将其转换为.GroupBy的结果?

您可以通过执行以下操作再次执行分组:

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

答案 2 :(得分:1)

假设每个非空列表的内容应该组成一个组......

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