Flo*_*ian 4 c# linq entity-framework
首先:我知道关于这个话题已经有很多问题了.但我真的找不到任何解决方案.我的问题是我使用抽象方法从dbset中进行选择.我的代码看起来像这样:
var dbe = (from i in dbEntities where IsEqualRecord(me, i) select i);
Run Code Online (Sandbox Code Playgroud)
这是我的抽象方法deklaration:
protected abstract bool IsEqualRecord(MEntity modelEntities, DEntity databaseEntity);
Run Code Online (Sandbox Code Playgroud)
MEntity并且DEntity是通用类型.我已经读过我的where语句无法转换为sql语句.但是我该如何解决这个问题呢?还有其他方法吗?
请不要投票结束这个问题.我已经看了几乎所有关于stackoverflow的类似问题,但我找不到解决方案.
Linq to Entities查询被转换为SQL以由DBMS执行,因此您只能使用可以转换为SQL的代码.自定义C#方法无法转换为SQL,因此EF无法转换查询.它抽象的事实是无关紧要的.
可能的解决IsEqualRecord方法是使用返回Expression<Func<DEntity, bool>>可以转换为SQL 的方法替换; 你可以做那样的事情:
var dbe = dbEntities.Where(MakeEqualityPredicate(me));
...
protected abstract Expression<Func<DEntity, bool>> MakeEqualityPredicate(MEntity m);
Run Code Online (Sandbox Code Playgroud)
该MakeEqualityPredicate方法应返回一个表达式,用于比较DEntity给定的MEntity.例如,派生类可以像这样实现它:
protected override Expression<Func<DEntity, bool>> MakeEqualityPredicate(MEntity m)
{
return d => d.Id == m.Id;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
279 次 |
| 最近记录: |