Объединить, где запросы с или оператор в QueryBuilder - PullRequest
3 голосов
/ 24 сентября 2011

QueryBuilder определяется в Microsoft.Windows.Data.DomainServices. Он позволяет вам создать запрос к коллекции типа T и применить его позже.

Когда мне нужно объединить, где запросы по && это легко, например, вы можете сделать

        var query = new QueryBuilder<Customer>();

        if (!string.IsNullOrEmpty(this.CustomerFirstName))
            query = query.Where(c => c.FirstName == this.CustomerFirstName);

        if (!string.IsNullOrEmpty(this.CustomerLastName))
            query = query.Where(c => c.LastName == this.CustomerLastName);

        if (!string.IsNullOrEmpty(this.CustomerPhone))
            query = query.Where(c => c.Phone == this.CustomerPhone);

        if (!string.IsNullOrEmpty(this.CustomerMail))
            query = query.Where(c => c.Mail == this.CustomerMail);

Я не могу выяснить, как мне объединить те запросы Where по || (Или) ??

У меня есть запрос, который загружает все товары в базу данных, поскольку товары организованы по категориям, и пользователь может выбрать только поднабор категорий (тот, который ему интересен) Я хотел бы загружать только товары в категориях, которые указал пользователь

Я знаю, что могу сделать это, объединяя Where () по &&, где я исключаю невыбранные категории пример

 query.Where(c => c.CategoryName != "MyCategory");

но мне это не нравится.

Я хотел бы сделать это в цикле foreach

private void LoadProducts()
{
     var query = new QueryBuilder<Product>();

     //Get Only Products in specified categories
     if (!string.IsNullOrEmpty(WebContext.Current.User.SelectedCategoriesCSV))
     {

         foreach (string cat in WebContext.Current.User.SelectedCategoriesCSV.Split(';'))
         {
               ????//query.Where(c => c.CategoryName == cat || );
         }

     }

 .....

Ответы [ 3 ]

0 голосов
/ 26 сентября 2011

Вы можете использовать динамический оператор LINQ, который доступен по этой ссылке: http://msdn.microsoft.com/en-us/bb330936.aspx (загрузите пример c # и получите код в каталоге \ LinqSamples \ DynamicQuery)

0 голосов
/ 19 января 2014

Вы можете использовать PredicateBuilder класс, разработанный Monty's Gush .

Попробуйте this .

0 голосов
/ 24 сентября 2011

Вам нужно динамически построить выражение где и затем передать его один раз в запрос. Где (). Проверьте PredicateBuilder , который предоставляет метод Or для этого. Надеюсь, это поможет.

...