Опция динамического поиска в MVC 1.0 - PullRequest
1 голос
/ 14 декабря 2010

Я ищу динамический способ реализовать поиск в моем приложении MVC 1.0.

Допустим, у меня есть пользовательский элемент управления, содержащий текстовое поле, раскрывающийся список и кнопку.Пользователь поместит запрос в текстовое поле, в раскрывающемся списке выберите столбец для поиска и затем нажмите кнопку поиска.

Выполняя вышеуказанные действия, я хочу сделать это в модели:

context.MyViewOrTableName.Where(p => (p.ColumnNameFromTheDropdown.Contains(DataFromTheTextbox)));

Возможен ли описанный выше сценарий в MVC 1.0, и если да, то как?Мы будем благодарны за любую помощь.

Решение:

context.MyViewOrTableName.Where("" + ColumnNameFromTheDropdown + ".Contains(@0)", DataFromTheTextbox);

Это произошло только после включения пространства имен System.Linq.Dynamic, созданного Скоттом и переданного Омаром впост ниже.

Ответы [ 2 ]

2 голосов
/ 14 декабря 2010

В настоящее время я делаю похожую вещь.

То есть у меня есть MVC View, который содержит различные параметры поиска (флажок, раскрывающийся список, текстовое поле), и я хотел элегантный способ вернуть "результаты поиска".

Итак, я создал простой класс - например," ProductSearchCriteria".

Этот класс не содержит ничего, кроме методов получения / установки для различных параметров поиска (которые я заполняю при отправке формы через привязку модели).

Затем я принимаю этот тип в качестве параметра в моем BLLМетод:

public ICollection<Product> FindProductsForCriteria(ProductSearchCriteria criteria)
{
   return _repository // GenericRepository<Product>
      .Find() // IQueryable<Product>
      .WithSearchCriteria(criteria) // IQueryable<Product>
      .ToList(); // List<Product>
}

Что касается , как применять фильтры, это зависит от нескольких вещей.Во-первых, я не знаю, используете ли вы Linq-To-Sql, NHibernate, Entity-Framework и т. Д. Кроме того, это зависит от вашей архитектуры (репозитория).

Вы не сможете "«динамически» применять фильтры с помощью лямбда-выражений (не так легко, во всяком случае).

То, что я сделал, было , создал метод расширения , чтобы изящно применить фильтры:Я сказал, это зависит от вашей архитектуры и ORM.Я использую Entity Framework 4.0, которая поддерживает отложенное выполнение , что означает, что я могу создавать запросы к своим объектам (IQueryable) и применять фильтры перед выполнением запроса.

1 голос
/ 14 декабря 2010

То, что вы ищете, это способ построить dynamic LINQ queries.Вы можете найти некоторые подробности о нем и его возможностях, однако, я считаю, что Dynamic Linq библиотека , которую написал Скотт Гатри, - именно то, что вы ищете.

Позволяет строить запросы из строк:

var query =
    db.Customers.
    Where("City = @0 and Orders.Count >= @1", "London", 10).
    OrderBy("CompanyName").
    Select("new(CompanyName as Name, Phone)");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...