2010-05-24 3 views
1

Есть ли более упрощенный способ написать этот запрос. Моя логика - , если коллекция содержит идентификаторы клиентов и код страны, выполните запрос ordey по идентификатору клиента по возрастанию. Если в CustID нет идентификатора, введите заказ по имени клиента. Есть ли лучший способ написать этот запрос? Я не очень хорошо знаком со сложными лямбдами.Есть ли лучший способ написать этот запрос LINQ?

var custIdResult = (from Customer c in CustomerCollection 
     where (c.CustomerID.ToLower().Contains(param.ToLower()) && 
     (countryCodeFilters.Any(item => item.Equals(c.CountryCode)))) 
            select c).ToList(); 

     if (custIdResult.Count > 0) 
     { 
      return from Customer c in custIdResult 
       where (c.CustomerName.ToLower().Contains(param.ToLower()) && 
       countryCodeFilters.Any(item => item.Equals(c.CountryCode))) 
       orderby c.CustomerID ascending 
       select c; 
     } 
     else 
     { 
      return from Customer c in CustomerCollection 
       where (c.CustomerName.ToLower().Contains(param.ToLower()) && 
        countryCodeFilters.Any(item => item.Equals(c.CountryCode))) 
       orderby c.CustomerName descending 
       select c; 
     } 

ответ

0

Может быть я бы низкий «PARAM» как оптимизация в самом начале и переписать следующий код так:

param = param.ToLower(); 

var custIdResult = (from Customer c in CustomerCollection 
        where (c.CustomerID.ToLower().Contains(param) && 
         (countryCodeFilters.Any(item => item.Equals(c.CountryCode)))) 
        select c).ToList(); 

IEnumerable<Customer> source = custIdResult.Count > 0 ? custIdResult : CustomerCollection; 

IEnumerable<Customer> q = from Customer ct in source 
          where 
           ct.CustomerName.ToLower().Contains(param) && 
           countryCodeFilters.Any(item => item.Equals(ct.CountryCode)) 
          select ct;                 

if (custIdResult.Count > 0) 
    return q.OrderBy(ct => ct.CustomerID); 

return q.OrderByDescending(ct => ct.CustomerName);  
+0

Мой мозг был заморожен и должен был подумать об этом так :) Отлично , Большое спасибо. – Spock

Смежные вопросы