2009-08-06 8 views
7

Ich habe ein Entitätsobjekt ‚User‘, die ‚IUser‘ implementiert:Was ist die beste Möglichkeit, jedes Element in einer LINQ to Entities-Abfrage an eine Schnittstelle zu übergeben?

IQueryable<User> users = Db.User; 
return users; 

Aber was ich will eigentlich zurückzukehren:

IQueryable<IUser> 

Also, was der beste Weg ist

konvertieren
IQueryable<User> 

zu

IQueryable<IUser> 

ohne die Abfrage tatsächlich auszuführen? Im Moment mache ich das, aber es scheint wie ein Hack:

IQueryable<IUser> users = Db.User.Select<User, IUser>(u => u); 
+1

Craig Stuntz ist korrekt: L2E unterstützt die Cast-Methode nicht. Wenn das fehlschlägt mit: "Kann den Typ 'MyType' nicht umschreiben, um 'MySubTypet' einzugeben. LINQ to Entities unterstützt nur das Generieren primitiver Typen von Entitätsdatenmodell". Ich habe meine Antwort gelöscht, da sie keinen Wert liefert. –

+0

Lädt das nicht die Ergebnisse? Es wird nicht die gesamte Tabelle für jeden Teil der Abfrage erhalten? – Maslow

+0

Welche .NET Version? In .NET 4 sollten Sie in der Lage sein, ein beliebiges IQueryable zu einer Variablen des Typs IQueryable zuzuweisen, ohne dass ein Cast aller Einträge die Liste ist ... – jessehouwing

Antwort

5

Ihre "hacky" Lösung sieht gut aus für mich.

+0

Ihre Richtigkeit. Ich habe gerade einen Schnelltest gemacht. (+1) –

+0

Ich habe das gerade mit folgender Ausnahme versucht: Der Ausdruck 'TypeAs' mit einer Eingabe vom Typ 'Bla.User' und eine Prüfung vom Typ 'Bla.IUser' wird nicht unterstützt. In LINQ to Entities-Abfragen werden nur Entitätstypen und komplexe Typen unterstützt. –

+0

Danke für den Test. Ich werde die Alternative entfernen. –