Фильтрация по выражению используя модель представления - PullRequest
0 голосов
/ 18 января 2020

У меня есть метод разбивки таблицы в базе данных. Часть с разбиением на страницы не важна, поэтому единственная цель - фильтрующая часть.

Поскольку метод Where из Entity Framework Core запрашивает Expression<Func<T>> в качестве параметра, где T - фактическая модель, и у меня есть действие в контроллере. которая запрашивает допустимую модель представления, как я могу использовать эту модель представления для генерации Expression<Func<T>> из этой модели представления?

Я хочу иметь возможность фильтровать таблицу на основе заполненных параметров в модели представления.

1 Ответ

0 голосов
/ 18 января 2020

Ну, в принципе, вам нужен Expression<Func<YourModel, bool>>. Вы строите фильтр для передачи в EF. Приведенной ниже информации более чем достаточно для начала работы.

Итак, представьте, что у вас есть класс, подобный приведенному ниже. Это может быть любой класс, а не только ViewModel.

public class Person
{
 public int Id {get;set;}
 public string Name {get;set;}
}

Выражение будет выглядеть так:

Expression<Func<Person,bool>> predicate = p => p.Name == "Some name";
db.People.Where(predicate); // How you would use it in a db context

Вы также можете просмотреть эту ссылку, которая использует LinqKit . Вам не нужно использовать LinqKit, но есть несколько хороших примеров http://www.albahari.com/nutshell/linqkit.aspx

Я хочу иметь возможность фильтровать таблицу на основе заполненных параметров в модели представления.

Поскольку вы хотите, чтобы вышеперечисленное вы могли добавить к вашему predicate и просто передать его к вашему Where,Any,Count... как единое целое. Вы можете увидеть множество приемов добавления в свой фильтр здесь: Как добавить к выражению

Мой любимый способ добавления - использование построителя предикатов linqkit http://www.albahari.com/nutshell/predicatebuilder.aspx В ссылке выше представлены многие методы, включая построитель предикатов.

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