Chciałbym zaimplementować MVC podczas używania LINQ (w szczególności LINQ-to-entity). Sposób, w jaki to zrobię, polega na tym, że kontroler generuje (lub wywołuje coś, co generuje) zestaw wyników za pomocą LINQ, a następnie zwraca go do widoku, aby wyświetlić dane. Problemem jest to, jeśli zrobić:Prosty sposób na zwracanie anonimowych typów (aby umożliwić MVC przy użyciu LINQ)
return (from o in myTable select o);
Wszystkie kolumny są odczytywane z bazy danych, nawet te (potencjalnie dziesiątki) nie chcę. I - co ważniejsze - I nie może zrobić coś takiego:
return (from o in myTable select new { o.column });
ponieważ nie ma sposobu, aby anonimowe typy typu bezpieczny! Wiem na pewno, że nie ma ładnego, czystego sposobu robienia tego w 3.5 (this nie jest czysty ...), , ale co z wersją 4.0? Czy jest coś zaplanowanego, a nawet zaproponowane? Bez czegoś takiego jak typowanie kodem dla LINQ lub bezpieczne anonimowe wartości zwracane (wydaje mi się, że kompilator powinien z pewnością być zdolny do tego), wydaje się prawie niemożliwe, aby oczyścić kontroler z widoku.
Podczas pracy z użytkownikiem należy się przyzwyczaić do tego, że sql wybiera wszystkie kolumny tabeli. Jeśli piszesz zapytania, które wybiera tylko kilka, możesz równie dobrze używać sql. Jeśli masz mnóstwo obiektów na swoich obiektach, to jest to twój problem. Twoje obiekty powinny być mniejsze i powinieneś pomyśleć o tym, jak to naprawić. Anonimowe typy nie powinny być przekazywane, a nie jako modele do widoku. –
@Mattias: Niestety, życie nie jest takie proste. Na przykład rozważmy przypadek, w którym wybieram kilka kolumn z różnych tabel, w tym tablicę obiektów wybranych przy użyciu zapytania wewnętrznego LINQ. O ile mi wiadomo, nie ma możliwości zwrócenia tego jako pojedynczego obiektu EF - to * ma * być nowym typem, a definiowanie nowego typu betonu dla każdego zapytania jest absurdalnie nieporęczne. –
Brzmi dla mnie tak, jakbyś miał całkiem kiepski model. Twój obiekt powinien mieć referencje, których potrzebuje i możesz po prostu użyć metody "Include()" w EF (aby szybko załadować te dane). Jeśli przestaniesz myśleć o danych jako o różnych kolumnach w różnych tabelach, a więcej o swoim modelu (więcej OO), najprawdopodobniej będzie o wiele łatwiej pracować. Konkluzja: Jeśli uważasz, że musisz omijać anonimowe typy, najprawdopodobniej zrobisz coś złego. –