LinqKit与'方法无法转换为商店表达式'异常

时间:2013-05-01 13:59:37

标签: c# linq-to-entities linq-expressions linqkit

我正在使用 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方法,以便商店提供商理解它?

2 个答案:

答案 0 :(得分:0)

LinqKit并不神奇,它无法在EntityMatches()otherLib.IsEntityMatch()内看到,所以它无法帮助您将这些内容翻译成SQL。

LinqKit可以做的是用简单的部件创建一个复杂的条件。但是每个简单的部分都必须自己翻译成SQl,我不知道如何在你的情况下做到这一点,特别是因为你正在使用一些外部库。

答案 1 :(得分:0)

您应该将方法转换为Linq Expression。 请阅读这可能会有所帮助 IQueryable extension method for linq2entities