|
Programmer ASP.NET MVC C# |
Programming
|
||
Предыдущий | Следующий | |
Стоит задача сделать страничку поиска, на которой очень много фильтров. Фильтры между собой свзязанны условиями OR или AND. Пример интерфейса: Сначала пришла идея воспользоваться Dynamic Linq library, где запросы можно писать в виде строк. Но я к этой библиотеке отношусь негативно, так как при изменении структуры базы данных (структуры таблиц), сложно отследить где нужно внести изменения. По этому пришлось пользоваться лямбда-выражениями. При создании условий отбора, мне нравится пользоваться Expression. Для примера рассмотрим фильтр по городам (будем отбирать компании по городу): Code: //фильтр по городам. По умолчанию фильтрации не происходит
Теперь перейдем к написанию условия AND между фильтрами. Для этого нужно понимать что такое Lazy Load - поздняя загрузка. Все очень просто. Когда мы пишем код: datacontext.Companies.Where(p=>p.CityID == 10) то запрос к БД будет происходить только после вызова метода ToList. Это означает, что мы можем писать вот так: var result = datacontext.Companies.Where(p=>p.CityID == 10); if(filter.SelectListSeti) В этом коде мы к фильтру CityID == 10 добавляем еще фильтр по сетям. Или другим языком выполняем условие AND.
Теперь рассмотрим условие OR: var result = datacontext.Companies.Where(p=>p.CityID == 10); if(filter.SelectListSeti) Запрос будет весьма тяжелый, но другого я пока не придумал.
|
В 11/8/2011 5:40:02 PM, Аноним
Надо смотреть в глубину Expression. Там можно много чего делать. Лепить логику с AND и OR