Linq + Where + abstract method = LINQ to Entities无法识别方法

首先:我知道关于这个话题已经有很多问题了。 但我真的找不到任何解决方案我的问题。 我的问题是我使用抽象方法从dbset中进行选择。 我的代码如下所示:

var dbe = (from i in dbEntities where IsEqualRecord(me, i) select i); 

这是我的抽象方法deklaration:

 protected abstract bool IsEqualRecord(MEntity modelEntities, DEntity databaseEntity); 

MEntityDEntity是generics类型。 我已经读过我的where语句无法转换为sql语句。 但是我该如何解决这个问题呢? 还有其他方法吗?

请不要投票来关闭这个问题。 我已经看了几乎所有关于stackoverflow的类似问题,但我找不到解决方案。

Linq to Entities查询被转换为SQL以由DBMS执行,因此您只能使用可以转换为SQL的代码。 自定义C#方法无法转换为SQL,因此EF无法转换查询。 它抽象的事实是无关紧要的。

一种可能的解决方法是用一个方法替换IsEqualRecord ,该方法返回一个可以转换为SQL的Expression> ; 你可以做那样的事情:

 var dbe = dbEntities.Where(MakeEqualityPredicate(me)); ... protected abstract Expression> MakeEqualityPredicate(MEntity m); 

MakeEqualityPredicate方法应该返回一个Expression, DEntity与给定的MEntity进行比较。 例如,派生类可以像这样实现它:

 protected override Expression> MakeEqualityPredicate(MEntity m) { return d => d.Id == m.Id; }