API динамического выражения: я могу сделать предикат, как кодировать спецификацию OrderBy? - PullRequest
1 голос
/ 28 июля 2011

Я выяснил, как сделать предикат из строки, предоставленной клиентом на основе Dynamic Linq (это обернуто в объект Спецификации):

return System.Linq.Dynamic.DynamicExpression.ParseLambda<TE, bool> 
       (filter.ToString(), arguments.ToArray())

где фильтр - это строка языка выражений, как описано в их файле справки. Работает как шарм.

Однако можно ли перевести строковый список полей 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 в строго типизированное лямбда-выражение? Примеры строк:

fieldname
fieldname descending

Другое примечание:

Я перевожу строки, поступающие от клиента, которые fieldname op value проверяют их с помощью Regex, чтобы предотвратить инъекцию. Кроме того, я ссылаюсь только на Dynamic Linq в объекте спецификации, а не на репозиторий.

1 Ответ

0 голосов
/ 13 марта 2012

Вероятно, это больше не проблема ... однако похоже, что ваше решение дано здесь .

...