我想出了如何从客户端提供的基于Dynamic Linq的字符串中执行谓词(这包含在Specification对象中):
return System.Linq.Dynamic.DynamicExpression.ParseLambda<TE, bool>
(filter.ToString(), arguments.ToArray())
其中filter是一个表达式语言字符串,如帮助文件中所述。像魅力一样。
但是,是否可以将orderby字段的字符串列表转换为强类型表达式,如下所示:
Expression<Func<E, object>> orderby
注意:
这是我的过滤器和订购商品的存储库方法
public IList<E> Get(Expression<Func<E, bool>> filterLambda = null,
Expression<Func<E, object>> orderbyLambda = null,
int? page = null,
int? pageSize = null)
我想用它来表示:
var a = Repo.Get( filterLambda: Specification.Where( StringListOfFilters),
orderbyLambda: Specification.OrderBy( StringListOfOrderBy),
page: 1,
pageSize: 100 );
有关如何将OrderBy字段的字符串列表转换为强类型lambda表达式的任何想法?字符串的例子是:
fieldname
fieldname descending
另一个注意事项:
我正在翻译来自客户端的字符串,fieldname op value
使用Regex验证它们以防止注入。另外,我只在Specification对象中引用Dynamic Linq,而不是存储库。