我有这段代码:
public static bool ContainEx<T>(this IQueryable<T> query, System.Linq.Expressions.Expression<System.Func<T, bool>> expression)
{
return query.Any(expression);
}
如果我使用它:
return bonusesWhereSearch.WhereEx(x => userBonusesWhereSearch.ContainEx(y => y.Bonus_Id == x.Id));
我收到此错误消息:
System.NotSupportedException:LINQ to Entities无法识别 方法&#39;布尔值 CONTAINEX [奖金](System.Linq.IQueryable`1 [SDataEntities.Bonus] System.Linq.Expressions.Expression`1 [System.Func`2 [SDataEntities.Bonus,System.Boolean]])&#39; 方法,并且此方法无法转换为商店表达式。
如果我使用Any
:
return bonusesWhereSearch.WhereEx(x => userBonusesWhereSearch.Any(y => y.Bonus_Id == x.Id));
确实有效。
答案 0 :(得分:1)
问题在于,该实体框架不会执行ContainEx
,但会尝试将此方法转换为SQL。而且由于这是自定义方法转换失败。如果直接使用Any
,则会将其正确转换为SQL等效项。