我编写了一个扩展方法,只从缺勤列表中获取批准的缺勤:
public static IQueryable<tblAbwesenheit> OnlyApprovedAbsences(this IQueryable<tblAbwesenheit> source)
{
return source.Where(a =>
(a.tblAbwesenheitsantraggenehmigungs.Any() && a.tblAbwesenheitsantraggenehmigungs.All(g => g.AbwesenheitsgenehmigungsstatusID == AbsenceStatusIds.Approved))
&& (!a.tblAbwesenheitsstornierunggenehmigungs.Any() || a.tblAbwesenheitsstornierunggenehmigungs.Any(g => g.AbwesenheitsgenehmigungsstatusID != AbsenceStatusIds.Approved)));
}
当我将此方法与“正常”选择一起使用时,一切都很好:
context.tblAbwesenheits.OnlyApprovedAbsences().ToList()
但是,当我在 Select 语句中使用它时,出现错误:
context.tblMitarbeiters.Select(m => new
{
Employee = m,
AbsencesForEmployee = m.tblAbwesenheits.OnlyApprovedAbsences()
})
.ToList();
LINQ to Entities does not recognize the method 'System.Linq.IQueryable
1[Data.tblAbwesenheit] OnlyApprovedAbsences(System.Linq.IQueryable
1[Data.tblAbwesenheit])' method, and this method cannot be translated into a store expression.
我已经搜索了很多,但找不到一种方法来教 Entity Framework 识别我的方法而不将查询扩展到
context.tblMitarbeiters.Select(m => new
{
Employee = m,
AbsencesForEmployee = m.tblAbwesenheits
.Where(a =>
(a.tblAbwesenheitsantraggenehmigungs.Any() && a.tblAbwesenheitsantraggenehmigungs.All(g => g.AbwesenheitsgenehmigungsstatusID == AbsenceStatusIds.Approved))
&& (!a.tblAbwesenheitsstornierunggenehmigungs.Any() || a.tblAbwesenheitsstornierunggenehmigungs.Any(g => g.AbwesenheitsgenehmigungsstatusID != AbsenceStatusIds.Approved)))
})
.ToList();
有没有办法让 EF 识别我的方法?
最佳答案
EF 正在尝试寻找与您的方法等效的 SQL,但没有找到。它可以找到扩展查询的等效项,这就是它起作用的原因。
您也许能够创建表达式而不是方法
var OnlyApprovedAbsencesExpression = (a =>
(a.tblAbwesenheitsantraggenehmigungs.Any() && a.tblAbwesenheitsantraggenehmigungs.All(g => g.AbwesenheitsgenehmigungsstatusID == AbsenceStatusIds.Approved))
&& (!a.tblAbwesenheitsstornierunggenehmigungs.Any() || a.tblAbwesenheitsstornierunggenehmigungs.Any(g => g.AbwesenheitsgenehmigungsstatusID != AbsenceStatusIds.Approved)))
然后写一些类似的内容
AbsencesForEmployee = m.tblAbwesenheits.Where(OnlyApprovedAbsencesExpression)
关于c# - LINQ to Entities 无法识别嵌套选择中的“System.Linq.IQueryable”方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29646075/