1

我想出了如何从基于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,而不是存储库。

4

1 回答 1

0

这可能不再是问题了..但是看起来您的解决方案已在此处给出。

于 2012-03-13T14:13:18.723 回答