动态表达式API:我可以做一个谓词,如何编写OrderBy规范?

时间:2011-07-28 15:02:17

标签: c# lambda repository dynamic-linq specification-pattern

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

1 个答案:

答案 0 :(得分:0)

这可能不再是问题..但是看起来你的解决方案是here