2016-04-06 20 views
6

Mam formularz wyszukiwania, w którym użytkownik może wprowadzić jeden do wielu parametrów (dane, stan, typ, ID, podsumowanie, opis) i pozostaw resztę pustą.Linq do SQL - Ignoruj ​​parametry wyszukiwania, które są zerowe lub zero

Oto mój kod Linq do SQL dla mojego podstawowego wyszukiwania. Czy istnieje sposób sprawdzenia każdego parametru w Linq dla zerowego, zerowego lub pustego łańcucha?

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

Dziękujemy!

+0

dlaczego to ma być 'w' zapytaniu LINQ? – Marco

+0

Wszystkie świetne odpowiedzi, to rozwiązało mój problem. Dziękuję Ci! – Simon

Odpowiedz

0

Jeśli chcesz tylko przefiltrować, jeśli pewne kryteria są przekazywane, należy zrobić coś takiego

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 

To ustawia wyrażenie na to, co chcesz, na podstawie którego wnioski są przekazywane

1

jeśli to nie musi być w twoim linq oświadczeniu, możesz to zrobić po klasycznych instrukcjach if.

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

Jeśli chcesz uniknąć tych wszystkich if s, można zrobić

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

Wszystkie te kontrole zostaną przetłumaczone na bazę danych i tam wykonane. Może to powodować niefortunne problemy, takie jak niewłaściwy wybór planu zapytania lub niemożność użycia korzystnego indeksu. –