В LINQ GroupBy отсутствует объект внешнего ключа?

Я использую GroupBy в моем LINQ запросы. Мой запрос работает нормально, за исключением того, что у меня отсутствуют объекты внешнего ключа. Затем я попытался добавить Include в моем запросе. Ниже приведен мой код:

public ActionResult GetEmployees()
{
     var Emloyees = db.Employees.AsQueryable();
     Emloyees.GroupBy(e=> new {e.JobTitleId, e.GenderId})
             .Select(tr => new MyObject
                 SalaryTotal = tr.Sum(r=>r.Salary)
              }).Include(tr=>tr.JobTitle).Include(tr=>tr.Gender).ToList();
}

Я получаю это исключение:

Тип результата запроса не является ни EntityType, ни CollectionType с типом элемента сущности. Путь "Включить" может быть указан только для запроса с одним из этих типов результатов.

Я пытался добавить это раньше GroupBy и прямо в db.Employees.AsQueryable(), но ничего не получалось. Что я делаю неправильно?

1 ответ

Решение

Проблема в том, что вы делаете проекцию с помощью.Select(...), после чего ваши включения не могут быть разрешены. Результатом этого запроса будет список MyObject, который не работает для включений, которые фактически находятся на Employee.

Так что попробуйте так:

Emloyees
    .GroupBy(e=> new {e.JobTitleId, e.GenderId})
    .Select(tr => new MyObject {
        SalaryTotal = tr.Sum(r=>r.Salary),
        JobTitle = tr.FirstOrDefault().JobTitle,
        Gender = tr.FirstOrDefault().Gender
    }).ToList();

Вам придется расширить MyObject двумя дополнительными свойствами, но результат вашего запроса будет именно тем, что вы хотите (я полагаю).

Другие вопросы по тегам