Entity Framework - NotSupportedException
var depts = ctx.Departments
.OrderBy(d => d.deptName)
.Select(d => d.deptNo);
foreach (int deptNumber in depts) {
var deptReports = from d in ctx.Departments
join r in matchingIncidents on d.deptNo equals r.deptNo
where r.deptNo == deptNumber
select r;
int deptReportsCount = deptReports.Count();
Я полностью сбит с толку! Все вопросы об этой ошибке говорят использовать == в примитивных полях (таких как идентификаторы), что я и делаю. Все, что я делаю с этим запросом, генерирует исключение. Точно такой же код работал раньше, и я не знаю, что я с ним сделал! Может кто-нибудь объяснить мне, что происходит?
Кроме того, я помню, что существовал класс EntityFramework с методами, которые позволяли вам преобразовывать объекты в запросе (например, даты), кто-нибудь знает, что это за класс?
ОБНОВИТЬ:
Вот изменения, которые я сделал (теперь это работает).
var deptReports = from r in matchingIncidents
join d in ctx.Departments on r.deptNo equals d.deptNo
where r.deptNo == deptNumber
select r;
2 ответа
matchingIncidents
выглядит как локальная коллекция сложного типа (потому что вы используете r.deptNo
). Это не разрешено в LINQ to Entities. Вы можете попробовать это вместо этого:
foreach (int deptNumber in depts) {
var deptReports = from d in ctx.Departments
join r in matchingIncidents.Select(m => m.deptNo)
on d.deptNo equals r
where r == deptNumber
select r;
int deptReportsCount = deptReports.Count();
matchingIncidents.Select(m => m.deptNo)
в настоящее время локальная коллекция примитивных типов и deptReports
это последовательность int
(при условии, что deptNo
имеет тип int
). Но для подсчета полученных элементов все должно быть хорошо.
редактировать
И вы, вероятно, ищете статический EntityFunctions
учебный класс:
http://msdn.microsoft.com/en-us/library/system.data.objects.entityfunctions.aspx
Может ли проблема быть:
join r in matchingIncidents on d.deptNo == r.deptNo