IQueryable.Any包装器。方法无法转换为商店表达式

时间:2015-04-27 08:37:03

标签: c# .net linq entity-framework iqueryable

我有这段代码:

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));

确实有效。

1 个答案:

答案 0 :(得分:1)

问题在于,该实体框架不会执行ContainEx,但会尝试将此方法转换为SQL。而且由于这是自定义方法转换失败。如果直接使用Any,则会将其正确转换为SQL等效项。