小编Mih*_*iP.的帖子

Linq到实体扩展方法内部查询(EF6)

有人可以向我解释为什么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

7
推荐指数
1
解决办法
1472
查看次数