2

我正在使用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 无法识别方法 'Boolean EntityMatches(MyEntity)' 方法,并且此方法无法转换为存储表达式。

如何重写 EntityMatches 方法以便商店提供者可以理解?

4

2 回答 2

0

LinqKit 不是魔术,它看不到里面的EntityMatches()or otherLib.IsEntityMatch(),所以它没有办法帮你把它们翻译成 SQL。

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

于 2013-05-01T14:31:57.910 回答
0

您应该将您的方法转换为 Linq 表达式。请阅读这篇文章,也许它会帮助 linq2entities 的 IQueryable 扩展方法

于 2013-05-01T15:45:46.920 回答