我正在为我的数据访问层中的实体框架对象使用 LINQ to Entities。
我的目标是尽可能多地从数据库中过滤,而不将过滤逻辑应用于内存结果。
为此,业务逻辑层将谓词传递给数据访问层。
我是说
Func<MyEntity, bool>
所以,如果我直接使用这个谓词,比如
public IQueryable<MyEntity> GetAllMatchedEntities(Func<MyEntity, Boolean> isMatched)
{
return qry = _Context.MyEntities.Where(x => isMatched(x));
}
我得到了例外
[System.NotSupportedException] --- {“LINQ to Entities 不支持 LINQ 表达式节点类型 'Invoke'。”}
该问题的解决方案建议使用LINQKit库中的 AsExpandable() 方法。
但同样,使用
public IQueryable<MyEntity> GetAllMatchedEntities(Func<MyEntity, Boolean> isMatched)
{
return qry = _Context.MyEntities.AsExpandable().Where(x => isMatched(x));
}
我得到了例外
无法将“System.Linq.Expressions.FieldExpression”类型的对象转换为“System.Linq.Expressions.LambdaExpression”类型
有没有办法在 LINQ to Entities 查询中使用谓词来查询实体框架对象,以便正确地将其转换为 SQL 语句。
谢谢你。