Приведение списка списков к IGrouping? - PullRequest
1 голос
/ 02 сентября 2010

У меня есть код, который создает список списков. Список этого типа:

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

Но нужно вернуть результат в следующем виде:

 IEnumerable<IGrouping<object, Device>>

Возможно ли это через приведение и т. Д., Или я должен использовать другое определение для моего списка списков?

Ответы [ 3 ]

2 голосов
/ 02 сентября 2010

Если я правильно понял ваши намерения, ответ будет ниже:

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

результат имеет тип IEnumerable<IGrouping<object, Device>>, где объект является ссылкой на ваш List<Device>.

1 голос
/ 02 сентября 2010

Предполагая, что содержимое каждого непустого списка должно образовывать группу ...

IEnumerable<IGrouping<object, Device>> query =
  from list in lists
  from device in list
  group device by (object)list;
1 голос
/ 02 сентября 2010

IGrouping<T1,T2> обычно создается с помощью запроса LINQ GroupBy.

Как вы заселяете GroupedDeviceList? Вы делаете это вручную или конвертируете из результата .GroupBy?

Вы можете снова выполнить группировку, выполнив что-то вроде этого:

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