【发布时间】:2016-12-28 11:04:37
【问题描述】:
在我的代码中:
context.TableA
.Where(x =>
x.Created >= startDate
&& context.TableB.RecordExists(x.Id, 1));
RecordExists 的定义如下:
public static bool RecordExists(this IQueryable<TableB> entity, int entityId, int entityTypeId)
{
return entity.Any(x => x.EntityId == entityId && x.EntityTypeId == entityTypeId);
}
上面的调用失败了
NotSupportedException:LINQ to Entities 无法识别该方法 '布尔记录存在(System.Linq.IQueryable`1[TableB],Int32,Int32)' 方法,并且该方法不能翻译成商店表达式。
但如果我将查询更改为:
context.TableA
.Where(x =>
x.Created >= startDate
&& context.TableB.Any(p => p.EntityId == x.Id && p.EntityTypeId == 1));
效果很好,有没有办法在查询中使用这个方法?
【问题讨论】:
-
很遗憾,在 Linq to Entities 中无法使用 Extension 方法,因为 EF 不支持此功能。
-
我认为您可以改用
bool RecordExists<T>(this IEnumerable<T> entity, ...;)。 -
@shA.t 为什么会这样?
-
我不是说它会起作用!!,我说你完全可以使用通用形式;)。
标签: c# .net entity-framework linq