2016-04-06 6 views
6

私は、ユーザーが1つ以上のパラメータ(データ、ステータス、タイプ、ID、概要、説明)を入力し、残りを空白のままにできる検索フォームを用意しています。Linq to SQL - ヌルまたはゼロの検索パラメータを無視する

私の基本的な検索のための私のLinq to SQLコードです。 Linq内の各パラメータをゼロ、ヌル、または空の文字列でチェックする方法はありますか?

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

ありがとうございます!

+0

? – Marco

+0

すべての偉大な答え、これは私の問題を解決しました。ありがとうございました! – Simon

答えて

0

あなたが唯一のフィルタにしたい場合は、一定の基準が渡された場合、あなたはこの

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 

ような何かを行う必要があります。これは、あなたがそれならば要求が

1

を渡されるに基づいて欲しいものに式を設定しますlinqステートメントの中にある必要はありません。あなたは古典的な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

あなたはこれらすべてのifのを避けたい場合は、あなたができる

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 
      }); 
なぜそれがあなたのLINQクエリ「に」する必要がない
+0

これらのチェックはすべてデータベースに変換され、そこで実行されます。これは、誤ったクエリプランの選択や適切なインデックスを使用できないなどの不幸な問題を引き起こす可能性があります。 –

関連する問題