我发现了这个功能(对于"在"查询表达式中)并且我想使用它,但是有一些错误而且我不知道为什么因为我在许多中看到了这个功能论坛,它应该工作......
static Expression<Func<TElement, bool>> BuildContainsExpression<TElement, TValue>(
Expression<Func<TElement, TValue>> valueSelector, IEnumerable<TValue> values)
{
if (null == valueSelector) { throw new ArgumentNullException("valueSelector"); }
if (null == values) { throw new ArgumentNullException("values"); }
ParameterExpression p = valueSelector.Parameters.Single();
// p => valueSelector(p) == values[0] || valueSelector(p) == ...
if (!values.Any())
{
return e => false;
}
var equals = values.Select(value => (Expression)Expression.Equal(valueSelector.Body, Expression.Constant(value, typeof(TValue))));
var body = equals.Aggregate<Expression>((accumulate, equal) => Expression.Or(accumulate, equal));
return Expression.Lambda<Func<TElement, bool>>(body, p);
}
错误是:
&#39; System.Collections.ObjectModel.ReadOnlyCollection&#39; 不包含的定义 &#39;单&#39;没有扩展方法 &#39;单&#39;接受第一个论点 类型 &#39; System.Collections.ObjectModel.ReadOnlyCollection&#39; 可以找到(你错过了吗? 使用指令或程序集 引用?)
&#39; System.Collections.Generic.IEnumerable&#39; 不包含的定义 &#39;任何&#39;没有延伸方法&#39;任何&#39; 接受第一个类型的参数 &#39; System.Collections.Generic.IEnumerable&#39; 可以找到(你错过了吗? 使用指令或程序集 引用?)
任何人都可以帮助我吗? 提前谢谢。
答案 0 :(得分:6)
您可能需要添加:
using System.Linq;