2010-09-02 8 views
1

J'ai du code qui crée une liste de listes. La liste est de ce type:Lancer une liste de listes à IGrouper?

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

Mais besoin de retourner le résultat dans le type suivant:

IEnumerable<IGrouping<object, Device>> 

Est-ce possible via un etc coulé ou devrais-je utiliser une définition différente pour ma liste des listes?

+0

Quelle serait la clé de vos groupes? Une propriété des appareils? –

Répondre

2

Si je comprends bien vos intentions, la réponse est ci-dessous:

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

est de type IEnumerable<IGrouping<object, Device>>, où l'objet est une référence à votre List<Device>.

1

IGrouping<T1,T2> est généralement créé via une requête LINQ GroupBy. Comment peupler GroupedDeviceList? Faites-vous cela manuellement ou en le convertissant à partir du résultat d'un .GroupBy?

Vous pouvez effectuer le regroupement à nouveau en faisant quelque chose comme ceci:

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

Cela retournerait un 'IEnumerable >>' –

+0

@Thomas Doit avoir utilisé 'SelectMany' bien sûr, répondre mis à jour. Merci. –

1

présumant que le contenu de chaque liste non vides doivent former un groupe ...

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