Страница поиска с MVC + Linq + EF - PullRequest
5 голосов
/ 26 марта 2011

Итак, я хочу реализовать страницу, которая ищет записи в базе данных. URL-адрес действия должен выглядеть примерно так: "~ / Mail / List / {PropertyName} / {PropertyValue}.

Имя свойства и значение - это соответствующее имя свойства объекта, по которому производится фильтрация, а значение - это значение свойства для сопоставления. Дело в том, что сущность содержит свойства многих типов. Int, строка, дата .. и т. Д.

Вопрос в том, как мне реализовать страницу динамического поиска или что-то подобное для фильтрации моих запросов?

Спасибо!

1 Ответ

3 голосов
/ 26 марта 2011

Все операторы LINQ ожидают, что в них будут переданы лямбда-выражения. Поэтому, когда вы хотите выполнить фильтрацию, например Where(x => x.[PropertyName] == [PropertyValue]), вы должны иметь возможность создать соответствующее лямбда-выражение.Обычно, когда значения известны во время компиляции, нет проблем, вы просто создаете лямбду.

Если вы не знаете значений во время компиляции, вы должны создать дерево выражений (это, по сути, из чего состоит лямбда-выражение) вручную.Это может быть немного сложно, но есть библиотеки, которые вам помогут, например Dynamic LINQ ( здесь - еще один хороший учебник по EF).Затем вы можете указать Где условие в виде строки , а библиотека во время выполнения преобразует ее в дерево выражений или выдает исключение, если оно неверно.

Итак, в вашем примере, используя Dynamic LINQ, вы можете выполнить свой запрос как db.Mails.Where(PropertyName + " == @0", PropertyValue);

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