2009-08-06 10 views
7

Mam obiektu encji „User”, który implementuje „IUser”:Jaki jest najlepszy sposób na przesłanie każdego elementu w zapytaniu LINQ do Entities do interfejsu?

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

Ale co ja rzeczywiście chcę wrócić jest:

IQueryable<IUser> 

Więc co jest najlepszym sposobem konwersji

IQueryable<User> 

do

IQueryable<IUser> 

bez faktycznego uruchomienia zapytania? Teraz robię to, ale wygląda na to, że hack:

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

Craig Stuntz jest poprawny: L2E nie obsługuje metody Cast. Jeśli nie powiedzie się z: "Nie można rzutować typu" MyType "na typ" MySubTypet. "LINQ to Entities obsługuje tylko podstawowe typy rzutowania Entity Data Model.". Usunąłem odpowiedź, ponieważ nie zapewnia ona żadnej wartości. –

+0

Czy to nie chce załadować wyników? nie dostaje całej tabeli, gdy dla każdej części zapytania? – Maslow

+0

Która wersja .NET? W .NET 4 powinieneś być w stanie przypisać dowolny IQueryable do zmiennej typu IQueryable bez potrzeby obsady wszystkich wpisów na liście ... – jessehouwing

Odpowiedz

5

Twoje "hacky" rozwiązanie wygląda dobrze dla mnie.

+0

Twoje poprawne. Właśnie zrobiłem szybki test. (+1) –

+0

Próbowałem tego z następującym wyjątkiem: Wyrażenie "TypeAs" z wprowadzeniem typu "Bla.User" i sprawdzeniem typu "Bla.IUser" nie jest obsługiwane. Tylko typy jednostek i typy złożone są obsługiwane w kwerendach LINQ do jednostek. –

+0

Dzięki za test. Usuwam alternatywę. –

Powiązane problemy