我已经构建了类似于您要构建的东西。我使用 System.Linq.Expressions 中的表达式树进行构建。因此,我建议您使用表达式树构建您的 where 谓词,其中谓词的签名为 Expression<Func<T,bool>>
.
下面的一些伪代码,其中 T 是 WCF RIA 实体:
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);
需要注意的一点是表达式 e1 = 表达式。相等(np,值);在函数中。您可以将此函数扩展为 >、<、=> 等,但您需要检查您使用的属性类型是否支持该运算符。
希望这可以帮助。