【发布时间】:2026-02-14 03:40:01
【问题描述】:
我写了一个扩展方法来从缺勤列表中只获得批准的缺勤:
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 无法识别该方法 'System.Linq.IQueryable
1[Data.tblAbwesenheit] OnlyApprovedAbsences(System.Linq.IQueryable1[Data.tblAbwesenheit])' 方法,并且该方法不能翻译成商店表达式。
我已经搜索了很多,但找不到一种方法来教 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 识别我的方法?
【问题讨论】:
标签: c# linq entity-framework extension-methods iqueryable