В 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 двумя дополнительными свойствами, но результат вашего запроса будет именно тем, что вы хотите (я полагаю).