私はあなたが構築しようとしているものに似たものを構築しました。System.Linq.Expressionsの式ツリーを使用して構築しました。したがって、述語のシグネチャが。である式ツリーを使用して、where述語を作成することをお勧めします Expression<Func<T,bool>>
。
以下のいくつかの擬似コード。TはWCFRIAエンティティです。
public static class QueryHelper
{
public static Expression<Func<T, bool>> ToPredicate<T> ( string propertyName, dynamic criteria )
{
ParameterExpression pe = Expression.Parameter( typeof( T ), "t" );
Expression np = Expression.Property( pe, propertyName );
ConstantExpression value = Expression.Constant( criteria );
Expression e1 = Expression.Equal( np, value );
var filter = Expression.Lambda<Func<T, bool>>( e1, pe );
return filter;
}
}
次に、次のように使用できます。
var selector = QueryHelper.ToPredicate<Category>("theColumn", "hello");
return this.ObjectContext.Categories.Where(selector);
LoadOperation<Employee> loader = context.Load( context.GetEmployeesQuery()
.Where( selector ) );
loader.Completed += (op) =>
{
if ( !op.HasErrors)
{
}
};
または
var selector = QueryHelper.ToPredicate<Category>("theColumn", true);
return this.ObjectContext.Categories.Where(selector);
注意すべきことの1つは、Expression e1=Expressionという行です。等しい(np、値); 関数内。この関数を拡張して>、<、=>などを実行できますが、使用しているプロパティタイプが演算子をサポートしていることを確認する必要があります。
お役に立てれば。