我正在尝试创建一个可用于 LINQ-to-Object 和 LINQ-to-Entities 的扩展方法,以创建功能Where
查询。最终会有更多内容进入它,但首先我遇到了一个问题,只是让方法获取 lambda 列选择并将其用作Contains()
调用的基础。我已经能够为 LINQ-to-Objects 做一些事情,但是当我尝试将它用于 LINQ-to-Entities 时,它就出现了问题。
以下是适用于 LINQ-to-Objects 的方法:
public static IQueryable<T> WhereContains<T>(this IQueryable<T> query, Expression<Func<T, string>> column, IList<string> values)
{
return query.Where(o => values.Contains(column.Compile().Invoke(o)));
}
如果这是针对实体框架运行的,我会收到一个异常说明
LINQ to Entities 无法识别该方法...
我有一种感觉,这将需要使用ExpressionVisitor
,但我无法弄清楚它需要如何连接。有没有人能够做到这一点?
更新:
我认为这不是重复的,因为 xanatos 提供的答案显示了在不使用 ExpressionVisitor 的情况下实现这一目标的直接方法。