我正在使用 LinqKit ,我想编写一个谓词,其中代码必须调用一个普通的布尔方法,如下所示:
var predicate = PredicateBuilder.False<MyEntity>();
var predicate = predicate.And(myEntity => this.EntityMatches(myEntity));
this.ObjectSet.AsExpandable().Where(predicate).ToList();
以下是 EntityMatches 方法的一部分:
private bool EntityMatches(MyEntity myEntity)
{
bool isMatch;
// I make a call to another library boolean method here.
isMatch = otherLib.IsEntityMatch(myEntity);
// I perform some other checks right after.
isMatch &= // some other conditions ...
return isMatch;
}
运行延迟执行时出现此异常:
LINQ to Entities无法识别方法'布尔值 EntityMatches(MyEntity)'方法,此方法无法翻译 进入商店表达。
如何重写EntityMatches方法,以便商店提供商理解它?
答案 0 :(得分:0)
LinqKit并不神奇,它无法在EntityMatches()
或otherLib.IsEntityMatch()
内看到,所以它无法帮助您将这些内容翻译成SQL。
LinqKit可以做的是用简单的部件创建一个复杂的条件。但是每个简单的部分都必须自己翻译成SQl,我不知道如何在你的情况下做到这一点,特别是因为你正在使用一些外部库。
答案 1 :(得分:0)
您应该将方法转换为Linq Expression。 请阅读这可能会有所帮助 IQueryable extension method for linq2entities