我正在使用 C# 2010 .NET 4.0,并且我有一个List<T>
名为的集合returns
,我需要在其上构建动态 LINQ 查询。
我正在使用此处引用的谓词生成器。
如果我有 1 个过滤条件,这可以正常工作,但如果我有 2 个或更多,那么,当query.compile()
被调用时,我会收到此错误:
从范围“”引用了“Check21Tools.IncomingReturn”类型的变量“tmp”,但未定义
代码:
Expression<Func<Check21Tools.IncomingReturn, bool>> query = null;
bool hasFilterItems = false;
if (filterArray != null)
{
foreach (string s in filterArray)
{
if (s == string.Empty)
{ break; }
else
{
hasFilterItems = true;
Int64 id = Int64.Parse(s);
query = query.Or(tmp => tmp.ID == id);
}
}
}
if (hasFilterItems)
{
returns = returns.Where(query.Compile()).CreateFromEnumerable
<Check21Tools.IncomingReturns, Check21Tools.IncomingReturn>();
}
代码:
public static Expression<Func<T, bool>> Or<T>(
this Expression<Func<T, bool>> expr1, Expression<Func<T, bool>> expr2)
{
if (expr1 == null) return expr2;
return Expression.Lambda<Func<T, bool>>
(Expression.OrElse(expr1.Body, expr2.Body), expr1.Parameters);
}