Wiem, że zmiana kształtu zapytania powoduje, że Entity Framework ignoruje wywołania włączone, ale czy istnieje sposób, w jaki można go pobrać, aby załadować właściwości podrzędne, gdy wybiorę wiele i grupa wg. W poniższym przykładzie chcę powiadomić wszystkich pracowników, którzy mają pracę zarezerwowaną w określonym czasie. Wywoływanie .ToArray() po miejscu, w którym tylko raz trafia do bazy danych, ale robię SelectMany i GroupBy w pamięci. Czy istnieje sposób, aby uzyskać SelectMany i GroupBy na serwerze SQL i nadal zawierać ServiceType i Ship i szczegóły pracownika?Uzyskiwanie struktury Entity do pełnego obciążenia dla grup przez
Szukam sposobu, aby wykonać jedno połączenie SQL z bazą danych, a kończy się lista pracowników, którzy mają pracę w okresie czasu i zadań, do których są przypisani.
var employeeJobs = DataContext.Jobs.
Include("ServiceType").
Include("Ship").
Include("JobEmployees.Employee").
Where(j => j.Start >= now && j.Start <= finish).
OrderBy(j => j.Start).
ToArray().
SelectMany(j => j.JobEmployees, (j, je) => new {
Job = j,
Employee = je.Employee
}).GroupBy(j => j.Employee);
_I robie z SelectMany i GroupBy w memory_. Skąd wiesz? Kształt zapytania w EF może być nieuchwytny. –
Jeśli chcesz skończyć z listą pracowników i ich pracy, sugeruję wykonanie zapytania odwrotnie: employeeJobs = from DataContext.Employees e where e.Any (... ma kryteria pracy ...) wybierz e. Nie jestem w stanie napisać zapytania LINQ dla ciebie bez jakiejś pomocy intellisense, ale masz pomysł? – GTG
@GertArnold Wywołanie 'ToArray' materializuje wyniki,' SelectMany' i 'GroupBy' przychodzą * po * wywołaniu' ToArray'. – casperOne