Mam prostą strukturę tabel usług z każdym z wielu urządzeń. W bazie danych jest to tabela Service
i tabela Facility
, gdzie tabela Facility
odwołuje się do wiersza w tabeli Usługa.Dlaczego ta kombinacja Select, Where i GroupBy powoduje wyjątek?
W naszej aplikacji, mamy następujące LINQ pracy:
Services
.Where(s => s.Facilities.Any(f => f.Name == "Sample"))
.GroupBy(s => s.Type)
.Select(g => new { Type = g.Key, Count = g.Count() })
ale z przyczyn ode mnie niezależnych, zbiór źródłowy jest rzutowany na obiekt bez jednostki przed wywołaniem Where
w ten sposób:
Services
.Select(s => new { Id = s.Id, Type = s.Type, Facilities = s.Facilities })
.Where(s => s.Facilities.Any(f => f.Name == "Sample"))
.GroupBy(s => s.Type)
.Select(g => new { Type = g.Key, Count = g.Count() })
Ale tu pojawia się następujący wyjątek, bez wyjątku wewnętrznym:
EntityCommandCompilationException: The nested query is not supported. Operation1='GroupBy' Operation2='MultiStreamNest'
Wyjmowanie Where
jednak sprawia, że praca, która sprawia mi wierzyć, że to tylko w tej konkretnej kombinacji metody połączeń:
Services
.Select(s => new { Id = s.Id, Type = s.Type, Facilities = s.Facilities })
//.Where(s => s.Facilities.Any(f => f.Name == "Sample"))
.GroupBy(s => s.Type)
.Select(g => new { Type = g.Key, Count = g.Count() })
Czy istnieje sposób, aby powyższy pracy: wybierz się do braku podmiotu obiekt, a następnie użyć Where
i na wynikowym zapytaniu? Dodanie ToList
po Select
działa, ale duży zestaw źródeł sprawia, że jest to niewykonalne (wykonałoby zapytanie w bazie danych, a następnie logikę grupującą w języku C#).
O której wersji i wersji EF mówimy? –
SQL Server 2014 i Entity Framework 6.1.1! –
To pytanie stanowi część mojej kolekcji [LINQ-to-entites! = LINQ-to-Object] (http://stackoverflow.com/a/13352779/861716). –