私はC#2010 .NET 4.0を使用しており、動的LINQクエリを構築する必要があるというList<T>
コレクションがあります。returns
ここで参照されている述語ビルダーを利用しています。
これは、フィルター基準が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);
}