2017-02-01 3 views
0

Я использую ASP.NET MVC 5 для создания приложения для выставления счетов, теперь у меня есть функция thing, которая получает объект фильтра с разными переменными, у меня проблема с содержит, когда я ищу, что я делаю неправильноLINQ using Contains with entity

public static List<Quote> getCustomerQuotes(QuoteFilter filter) 
    { 
     using (var db = new AppDBContext()) 
     { 
      var q = db.Quotes.Where(u => u.entryDate > 0); ; 

      if (filter.type != null) 
      { 
       q = q.Where(u => u.quoteType == filter.type); 
      } 

      if (filter.only_permitable != null) 
      { 
       q = q.Where(u => !Values.NON_PERMITABLE_QUOTES.Contains(u.quoteType)); 
      } 

      if (filter.quote_status != null) 
       q = q.Where(u => u.quote_status == (int)filter.quote_status); 

      if (filter.quotenumber != null) 
      { 
       q = q.Where(u => u.quote_number.Contains(filter.quotenumber)); 
      } 

      if (filter.permitnumber != null) 
       q = q.Where(u => u.permit_number.Contains(filter.permitnumber)); 

      if (filter.permit_status != null) 
       q = q.Where(u => u.permit_status == (int)filter.permit_status); 

      if (filter.quoteId != null) 
       q = q.Where(u => u.Id == (int)filter.quoteId); 

      if (filter.customer_id != null) 
       q = q.Where(u => u.customer_id == (int)filter.customer_id); 


      q = q.OrderByDescending(u => u.Id); 
      FileLogger.Log("getCustomerQuotes", q.ToString()); 
      return q.ToList(); 
     } 
    } 

Когда я вызвать функцию и передать quotenumber, то содержит оленью кожу поиска, она ничего не возвращает

+0

Я не вижу ничего плохого. Кроме того, фильтр 'allownumber' подобен, работает ли он? –

ответ

0

вы должны оценить ваше выражение, прежде чем применить OrderByDescending.

q = q.Where(u => u.quote_number.Contains(filter.quotenumber)).ToList(); 

Это должно произойти и с остальными местами.

0

Номер цитаты буквенно-цифровой? Если да, то как Contains чувствителен к регистру, вы можете попробовать сравнить, сначала повернув источник и цель в тот же случай? как

q = q.Where(u => u.quote_number.ToLower().Contains(filter.quotenumber.ToLower()));

Приветствия

0

Хорошо, я отвечаю на мой собственный вопрос после того, как найти решение или я может назвать это хак

public static List<Quote> getCustomerQuotes(QuoteFilter filter) 
    { 
     using (var db = new AppDBContext()) 
     { 
      var q = db.Quotes.Where(u => 

      (filter.type != null ? u.quoteType == filter.type : u.quoteType > 0) && 

      (filter.only_permitable != null ? !Values.NON_PERMITABLE_QUOTES.Contains(u.quoteType) : u.permitType > 0) && 

      (filter.quote_status != null ? u.quote_status == filter.quote_status : u.quote_status > -100) && 

      (!string.IsNullOrEmpty(filter.quotenumber) ? u.quote_number.Contains(filter.quotenumber) || u.groupName.Contains(filter.quotenumber) : u.quoteType > 0) && 

      (!string.IsNullOrEmpty(filter.permitnumber) ? u.permit_number.Contains(filter.permitnumber) || u.groupName.Contains(filter.permitnumber) : u.quoteType > 0) && 

      (filter.permit_status != null ? u.permit_status == filter.permit_status : u.quoteType > 0) && 

      (filter.quoteId != null ? u.Id == filter.quoteId : u.Id > 0) && 

      (filter.customer_id != null ? u.customer_id == filter.customer_id : u.customer_id > -1) 

      ).OrderByDescending(u => u.Id); 


      //FileLogger.Log("getCustomerQuotes", q.ToString()); 
      return q.ToList(); 
     } 
    } 

я не знаю, почему он не работал в первый раз, но теперь он работает.