2016-04-06 17 views
6

Ich habe ein Suchformular, wo der Benutzer einen zu viele Parameter eingeben kann (Daten, Status, Typ, ID, Zusammenfassung, Beschreibung) und den Rest leer lassen.Linq to SQL - Ignoriere Suchparameter, die Null oder Null sind

Hier ist meine Linq zu SQL-Code für meine grundlegende Suche. Gibt es eine Möglichkeit, jeden Parameter innerhalb des Linq auf null, null oder eine leere Zeichenfolge zu überprüfen?

List<RequestStatusModel> objRequestStatus = new List<RequestStatusModel>(); 
var query = from r in SimCareDB.Requests 
      where r.CustomerID == 31  
      select (new RequestStatusModel 
      { 
       RequestID = r.RequestID, 
       RequestTitle = r.RequestTitle, 
       DateAdded = r.DateAdded.ToString(), 
       DateChanged = r.DateChanged.ToString(), 
       RequestStatusID = r.StatusID 
      }); 

Vielen Dank!

+0

warum es sein muss 'in' Ihre LINQ-Abfrage? – Marco

+0

Alle guten Antworten, das hat mein Problem gelöst. Vielen Dank! – Simon

Antwort

0

Wenn Sie wollen nur auswählen, wenn bestimmte Kriterien übergeben wird, sollten Sie so etwas wie dieses

var objRequestStatus = new List<RequestStatusModel>(); 
    var query = from r in SimCareDB.Requests 
       where r.CustomerID == 31 

if (String.IsNullOrEmpty(r.RequestID)) 
    objRequestStatus = objRequestStatus.Where(x => x.RequestID == r.RequestID); 

if (String.IsNullOrEmpty(r.RequestTitle)) 
    objRequestStatus = objRequestStatus.Where(x => x.RequestTitle == r.RequestTitle); 

//you other filters here 

tun um den Ausdruck Dies stellt, was Sie wollen, basierend auf die Anfragen weitergeleitet werden

1

Wenn es muss nicht in Ihrer Linq-Anweisung sein, Sie könnten es einfach mit klassischen if-Anweisungen tun.

List<RequestStatusModel> objRequestStatus = new List<RequestStatusModel>(); 
var query = from r in SimCareDB.Requests 
      where r.CustomerID == 31 
      select (new RequestStatusModel 
      { 
       //... 
      }); 

if(data != null) //Replace with additional checks, if neccessary 
{ 
    query = query.where(x=> ...); 
} 

if(status != null) 
{ 
    query = query.where(x => ...) 
} 
0

Wenn Sie alle diese if s vermeiden möchten, können Sie tun

List<RequestStatusModel> objRequestStatus = new List<RequestStatusModel>(); 
var query = from r in SimCareDB.Requests 
      where (r.CustomerID == 31) && 
        (!String.IsNullOrEmpty(id) ? r.RequestID == id : true) && 
        (!String.IsNullOrEmpty(status) ? r.StatusID == status : true) 
        /* And so on */ 
      select (new RequestStatusModel 
      { 
       RequestID = r.RequestID, 
       RequestTitle = r.RequestTitle, 
       DateAdded = r.DateAdded.ToString(), 
       DateChanged = r.DateChanged.ToString(), 
       RequestStatusID = r.StatusID 
      }); 
+0

Alle diese Prüfungen werden in die Datenbank übersetzt und dort ausgeführt. Dies kann zu unglücklichen Problemen führen, wie z. B. falsche Abfrageplanauswahl oder Unfähigkeit, einen günstigen Index zu verwenden. –