2017-02-01 2 views
0

Ich benutze ASP.NET MVC 5, um eine Anwendung für die Abrechnung zu erstellen, jetzt habe ich Sache Funktion, die ein Filterobjekt mit verschiedenen Variablen erhalten, habe ein Problem mit enthält, wenn ich suche, was mache ich falschLINQ mit Enthält mit Einheit

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(); 
     } 
    } 

Wenn ich die Funktion aufrufen und übergeben quotenumber, die doesnt Suche enthält, es gibt nichts

+0

Ich sehe nichts falsch. Außerdem ist der Filter "permitnumber" ähnlich, funktioniert es? –

Antwort

0

Sie haben Ihren Ausdruck zu bewerten, bevor Sie die OrderByDescending anzuwenden.

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

Dies sollte auch zu den Raststätten passieren.

0

Ist die Angebotsnummer alphanumerisch? Wenn ja, wie Contains Groß-und Kleinschreibung ist können Sie versuchen Vergleich, indem Sie zuerst Quelle und Ziel auf den gleichen Fall? wie

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

Prost

0

Ok, ich meine eigene Frage zu beantworten, nachdem eine Lösung zu finden, oder ich kann es

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(); 
     } 
    } 

ich weiß nicht, einen Hack nennen, warum Es funktionierte nicht das erste Mal, aber jetzt funktioniert es.