2010-12-01 10 views
5

Völlig verwirrt über die hier erforderlichen Datentypen.Convert Linq ObjectQuery IQueryable zu IEnumerable

Ich habe diese Aussage Linq:

   var feat = AllCustomers 
        .Select(c => c.CustomerServices.SelectMany(cs => cs.CustomerServiceFeatures) 
        .SelectMany(csf => csf.ConfigElements).Where(ce => ce.Name == "ItemType").Select(ce => ce.Value).Distinct()); 

Es die erforderlichen Daten zurückgibt, und VS sagt mir, dass der Typ festgelegt wird, wie:

System.Data.Objects.ObjectQuery<System.Collections.Generic.IEnumerable<string>> 

Allerdings möchte ich diese Daten hinzufügen in eine Liste von Strings:

List<string> itemTypes = new List<string>(); 
itemTypes.AddRange(feat); 

Aber das wirft einen Fehler:

Argument 1: cannot convert from 'System.Linq.IQueryable<System.Collections.Generic.IEnumerable<string>>' to 'System.Collections.Generic.IEnumerable<string>' 

Ich kann die erforderliche Syntax nicht finden, um den richtigen Typ zu konvertieren. Kann jemand helfen? ,

var itemTypes = feat.ToList(); 

Antwort

8

Kompilierzeitfehler zeigt:

Cheers, Matt

+1

Die Antwort war, dass ich die ganze Zeit direkt ins Gesicht starrte, ich versuchte alle möglichen SelectMany() Tricks außer dieser. Auch .. diese Antwort war sehr schwer für Google! –

0

Sie

List<string> list = feat.ToList<string>() 
+0

Ich habe Sie nicht abgemeldet, aber das funktioniert nicht. Sie benötigen SelectMany(), um die Auflistung zu reduzieren. – Rap

0

Je nachdem, was Sie brauchen, um mit der Liste zu tun, können Sie einfach tun können dass feat ist "Sammlung von Sammlung von Zeichenfolge" (wörtlich "IQueryable von IEnumerable von Zeichenfolge"). Sie müssen also eine flache Sammlung erstellen.

feat.SelectMany(x => x) 
1

System.Data.Objects.ObjectQuery<T> ist eine Implementierung von System.Linq.IQueryable<T>. Ihr Typ ist jedoch ein IQueryable von IEnumerable-Objekten. Führen Sie SelectMany aus, sodass Sie keine Sammlung von Zeichenkettensammlungen mehr haben, sondern nur eine Sammlung von Zeichenketten.

Verwandte Themen