Фильтрация в Linq, содержащем пользовательский тип, с использованием ODataQueryOptions

При реализации Kendo Grid в MVC, который выполняет операции на стороне сервера, я оказался в сложной ситуации, т. Е. Мне нужно фильтровать, сортировать, выгружать мои данные с помощью linq. И вся информация, которую я получил, находится в типе ODataQueryOptions.

(Не уверен, нужно ли упоминать или нет, но для полноты картины мы выполняем операции запроса через паттерн UnitOfWork)

Итак, операция, выполняющая запрос, скопирована ниже:

public static List<T> GetT(this IRepositoryAsync<T> repository, ODataQueryOptions<T> options)
    {
        var query = repository.Query().Tracking(false).Include(x => x.T2)
            .Select(s => new
            {
                P1 = s.P1,
                P2 = s.P2,
                P3 = s.T2.P1 + "," + s.T2.P2
            })
            .Select(s => new T1
            {
                P1 = s.P1,
                P2 = s.P2,
                P3 = s.P3
            });

        if (options.Skip != null)
            query = query.Skip(options.Skip.Value);
        if (options.Top != null)
            query = query.Take(options.Top.Value);

        return query.ToList();
    }

Теперь я хочу знать, есть ли возможность применить оставшиеся параметры oData к запросу linq (как вы можете видеть, $skip и $top уже применены, как мы можем применить OrderByQueryOption и FilterQueryOption).


person farhan iqbal    schedule 29.08.2016    source источник


Ответы (1)


В OrderByQueryOption есть свойство OrderByNodes, которое вы можете использовать для создания запроса, но в FilterQueryOption, трудно перевести FilterClause, вам нужен FilterBinder, чтобы сделать это за вас, но он не общедоступен в 5.9.1, он общедоступен в 6.0.0.

person Fan Ouyang    schedule 30.08.2016
comment
Мое получение чего-то типа Func‹IQueryable‹T›, IOrderedQueryable‹T›› непосредственно из OrderByQueryOption поможет мне (поскольку метод, который выполняет Order by в UnitOfWork, ожидает этот тип) - person farhan iqbal; 30.08.2016