Tak, istnieją inne sposoby (w rzeczywistości kilka), ale zdecydowanie sugeruję, aby nie używać żadnego z nich. Najlepszym rozwiązaniem w przypadku tego przypadku jest utworzenie nowego niestandardowego typu, który zawiera dane, które posiadasz. Będzie to zdecydowanie najbardziej dostępna opcja.
Anonimowe typy zostały zaprojektowane specjalnie do stosowania w ramach pojedynczej metody. Walczysz z konstrukcją funkcjonalności, aby zrobić inaczej, a więc będzie to trudne do zrobienia, najprawdopodobniej stracisz Intellisense, wydajność najprawdopodobniej ucierpi, a biedny sap, który musi powrócić i utrzymać kod będzie nie mam pojęcia, co się dzieje i jak dostosować zapytanie.
Podstawowym problemem większości alternatywnych rozwiązań jest utrata sprawdzania czasu kompilacji. Jeśli zapytanie usuwa parametr, dodaje parametr, zmienia typ itp. Kod, który go używa, nie ma możliwości poznania. Pisząc kod, aby użyć kwerendy, nie masz możliwości dowiedzenia się, jakie są wszystkie dane, jakie są ich typy, jakie są imiona zmiennych itp. Trzeba się martwić o literówki w nazwach zmiennych, które kompilator może złapać, i będziesz konsekwentnie trzeba patrzeć na wewnętrzne działania metody, która generuje zapytanie. Tracisz możliwość traktowania go jako czarnej skrzynki lub abstrakcji, co jest znaczące.
Jeśli niepokoi Cię czas i wysiłek potrzebny do utworzenia tych niestandardowych typów, istnieje szereg automatycznych narzędzi zaprojektowanych do generowania takich klas na podstawie tabel bazy danych lub innych źródeł.
+1, Nie widzę powodu, aby _nie_ tworzyć typu niestandardowego. –