LINQ время сборки Silverlight c # - PullRequest
0 голосов
/ 23 февраля 2011

У меня есть такой метод:

Параметры могут быть нулевыми

public string getAll(string d1, string d2, string d3){
     Do the linq
}

Я хочу сделать запрос linq, если d1 не ноль, другой, если d2 не ноль,другое, если d1 и d2 не равны нулю и все возможные варианты с параметрами.

Я не хочу делать:

if(d1 != null)
//linq opt1
if(d2 != null
//linq opt2
if(d1 != null && d2 != null)
//linq opt3

пожалуйста: (

Ответы [ 3 ]

2 голосов
/ 23 февраля 2011

Как правило, запросы в этих типах вопросов имеют некоторую общность (в противном случае, зачем использовать один метод?). Возможно, вы ищете условную фильтрацию.

public string getAll(string d1, string d2, string d3)
{
   using(CustomDataContext dc = new CustomDataContext())
   {
     IQueryable<Customer> query = dc.Customers;
     if (d1 != null)
     {
       query = query.Where(c => c.Name.StartsWith(d1));
     }
     if (d2 != null)
     {
       query = query.Where(c => c.Orders.Any(o => o.OrderNumber == d2));
     }
     if (d3 != null)
     {
       query = query.Where(c => c.FavoriteColor == d3);
     }
     query =
        from c in query
        order c by c.Name
        select c;

     List<Customer> results = query.Take(5).ToList();
     string answer = SomeMethod(results);
     return answer;
   }
} 
0 голосов
/ 23 февраля 2011

Ради того, чтобы сделать это в одной строке, вы можете использовать вложенные троичные операторы ...

var result = d1==null?d2==null?/*Linq when both are null*/:/*Linq when d1 is null but d2 isn't*/:/*linq when neither d1 and d2 are null*/;

В этом примере нет 3 параметров, но просто продолжайте вкладывать:)

0 голосов
/ 23 февраля 2011
public string getAll(string d1, string d2, string d3){
     if (d1 == null)
      //Do LINQ
     if (d2 == null)
      //Do LINQ
     if (d3 == null)
      //Do LINQ

      if (d1 == null && d2 == null && d3 != null)
       //Do LINQ
      if (d1 == null && d2 != null && d3 == null)
       //Do LINQ
      if (d1 != null && d2 == null && d3 != null)
       //Do LINQ
}

Это не копирование и вставка, но вы должны понять. Необходимо выполнить некоторые проверки, чтобы обе группы не выполнялись.

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