сортировка, фильтрация и разбиение по страницам с помощью Entity Framework Core 2 - PullRequest
1 голос
/ 25 сентября 2019

Я создаю табличную сетку данных, и каждый заголовок столбца можно сортировать (как по возрастанию, так и по убыванию), а также фильтровать по текстовому полю под именем столбца.

Я кое-что нашелвыяснить лучший подход к генерации моих запросов LINQ для структуры сущностей, и лучшее, что я нашел, было следующее: https://docs.microsoft.com/en-us/aspnet/core/data/ef-mvc/sort-filter-page?view=aspnetcore-3.0

Это просто использует большой переключатель / регистр (только для упорядочивания ... даже не учитывает нескольковарианты фильтрации, кроме одного).Конечно, должен быть лучший, более краткий подход, чем этот?

Я наполовину соблазн просто использовать свой старый sproc и вызывать sproc с EF, если это действительно путь, по которому мне придется идти.

В идеале я хотел бы что-то вроде этого:

    return myContext.Where(x => 
x.%thisisadynamicfield%.Contains("%somefiltervalue%" && 
x.%anotherdynamicfield%.Contains("%someothervalue%" && ...)
.OrderBy(x => x.%someorderybydynamicfield%)

Я в порядке, используя условное выражение для определения порядка возрастания или убывания, но мне бы очень хотелось сжать все остальное.насколько это возможно, и эта статья MS, которую я связал выше, выглядит как рвота кодом, и она покрывает только часть моих потребностей.

РЕДАКТИРОВАТЬ: как почти всегда, как только я публикую здесь и попробую еще однуВ поисках усилий я нахожу то, что ищу.Я только что нашел это: https://github.com/harshwPro/EntityFrameworkPaginate, что выглядит очень многообещающе.Я сообщу здесь, если это решит мою проблему.

РЕДАКТИРОВАТЬ 2: хорошо, проект github, на который я ссылался в моем первом редактировании, безусловно, является более чистым решением, чем статья MS, которую я опубликовал первоначально, но он все еще оставляет меня с написаниемОгромный условный генерировать мои фильтры по свойству.Используя это решение, мне пришлось бы написать что-то вроде этого: dataPagingModel.Filters.Add(true, x => x.MyCoolProperty.Contains("blah"));, но пришлось бы условно добавить новые фильтры на основе опубликованных параметров моего углового уровня представления - switch / case или какого-то огромного блока if / else.В идеале мне бы хотелось просто перебрать весь список опубликованных фильтров и динамически добавить эти фильтры в цикл.Итак, я думаю, что мой вопрос теперь сводится к тому, есть ли способ динамического (общего) доступа к свойствам объекта в лямбда-выражении?

РЕДАКТИРОВАТЬ 3: Я думаю, что в этом посте есть ответы, которые мне нужны: Общий метод для фильтрации объекта списка

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...