如何在Entity Framework对象中使用LINQ到实体的谓词

21 浏览
0 Comments

如何在Entity Framework对象中使用LINQ到实体的谓词

我在我的数据访问层中使用LINQ to Entities来处理Entity Framework对象。

我的目标是尽可能地从数据库中筛选数据,而不将筛选逻辑应用于内存中的结果。

为了达到这个目的,业务逻辑层向数据访问层传递了一个谓词。

我的意思是

Func

因此,如果我直接使用这个谓词,比如

public IQueryable GetAllMatchedEntities(Func isMatched)
{
    return qry = _Context.MyEntities.Where(x => isMatched(x));
}

我会得到异常

[System.NotSupportedException] --- {"不支持LINQ to Entities中的LINQ表达式节点类型'Invoke'。"}

这个问题中的解决方案建议使用LINQKit库中的AsExpandable()方法。

但是,再次使用

public IQueryable GetAllMatchedEntities(Func isMatched)
{
    return qry = _Context.MyEntities.AsExpandable().Where(x => isMatched(x));
}

我会得到异常

无法将类型为'System.Linq.Expressions.FieldExpression'的对象转换为类型'System.Linq.Expressions.LambdaExpression'

有没有办法在LINQ to Entities查询中使用谓词来正确地将其转换为SQL语句。

谢谢。

0