有人可以向我解释为什么EF引擎在以下情况下失败了吗?
它可以使用以下表达式正常工作:
var data = context.Programs
.Select(d => new MyDataDto
{
ProgramId = d.ProgramId,
ProgramName = d.ProgramName,
ClientId = d.ClientId,
Protocols = d.Protocols.Where(p => p.UserProtocols.Any(u => u.UserId == userId))
.Count(pr => pr.Programs.Any(pg => pg.ProgramId == d.ProgramId))
})
.ToList();
Run Code Online (Sandbox Code Playgroud)
但是,如果我将一些封装到扩展方法中:
public static IQueryable<Protocol> ForUser(this IQueryable<Protocol> protocols, int userId)
{
return protocols.Where(p => p.UserProtocols.Any(u => u.UserId == userId));
}
Run Code Online (Sandbox Code Playgroud)
结果查询:
var data = context.Programs
.Select(d => new MyDataDto
{
ProgramId = d.ProgramId,
ProgramName = d.ProgramName,
ClientId = d.ClientId,
Protocols = d.Protocols.ForUser(userId)
.Count(pr …Run Code Online (Sandbox Code Playgroud) c# linq extension-methods entity-framework entity-framework-6