我想出了如何从基于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
表达式验证它们以防止注入。另外,我只在 Specification 对象中引用 Dynamic Linq,而不是存储库。