LINQ to Entities不支持LINQ表达式节点类型"Lambda"

zra*_*zdn 8 c# linq entity-framework

我正在尝试使用Expression并传递给查询.但我有错误 - LINQ to Entities不支持LINQ表达式节点类型'Lambda'.我也使用linqkit.dll和AsExpandable(),但是有相同的错误.

public List<Correct> GetCorrects(Expression<Func<Correct, bool?>> predicate)
{
    using (SystemsEntities context = new SystemsEntities())
    {
        var result = context.Corrects.Where(x => predicate == null);
        return result.ToList();
    }
}
Run Code Online (Sandbox Code Playgroud)

我收到上述错误.什么失败了?

Den*_*nis 14

用这个:

var result = context.Corrects.Where(predicate);
Run Code Online (Sandbox Code Playgroud)

而不是这个:

var result = context.Corrects.Where(x => predicate == null);
Run Code Online (Sandbox Code Playgroud)

Where期望类型的参数Expression<Func<T, bool>>,但你试图通过Expression<Func<T, Expression<...>>.这是有效的编译时构造,但在运行时LINQ提供程序失败,当它尝试转换predicate为SQL时.

还要注意,你应该改变Expression<Func<Correct, bool?>>Expression<Func<Correct, bool>>.