2016-12-16 71 views
0

我通過傳遞過濾器從db獲取結果。目前我已通過code列表,我正在獲取正確的數據。以下是代碼。Linq在條件中傳遞多個列表

public DataTable getData(IList<string> Code, 
         IList<string> category, 
         IList<string> state, 
         IList<string> Type, 
         IList<string> general) 
{ 
    DataTable dt = new DataTable(); 
    var result = _db.Sample.Where(x => Code.Contains(x.Code)); 

    if (result == null) 
    { 
     return null; 
    } 
    else 
    { 
     dt = Utility.ToDataTable(result.ToList()); 
    } 

    return dt; 
} 

我要通過4個更多的過濾器,即,category, state, type and general。另外我必須檢查它們是否都不爲空。

我不知道如何檢查null的值,然後將其傳遞給查詢。

任何建議,將不勝感激

回答

1

您可以檢查是否所有5個爲空,然後執行lambda表達。並且爲4個額外的過濾器添加條件,使用&&運算符並將其與代碼過濾器一起添加。

public DataTable getData(IList<string> Code, IList<string> category, IList<string> state, IList<string> Type, IList<string> general) 

     { 
      DataTable dt = new DataTable(); 

       if(code==null) 
       code='' 
       if(category==null) 
       category='' 
       if(state==null) 
       state='' 
       if(general==null) 
       general=''    

       var result = _db.Sample.Where(x => (Code.Contains(x.Code) || Code=='') && (category.Contains(x.category)|| category=='') && (state.Contains(x.state)||state=='') && (general.Contains(x.general)||general=='')) 


      if (result == null) 
      { 
       return null; 
      } 
      else 
      { 
       dt = Utility.ToDataTable(result.ToList()); 
      } 
      return dt; 
     } 
+0

這個解決辦法,如果代碼爲空或任何其他參數爲null我要檢查是否有任何參數的值已然後在條件 –

+0

@OwaisAhmed更新申請將不執行查詢我的回答 –

+0

@JibinBalachandran不會拋出null異常,因爲null檢查是在包含檢查之後完成的嗎? –

1

我不知道,如果你想查詢包含所有列表或只是他們中的任何一個。我,給兩個

public DataTable getData(IList<string> Code, IList<string> category, IList<string> state, IList<string> Type, IList<string> general) 

    { 
     DataTable dt = new DataTable(); 
     var result = null; 
     //result = _db.Sample.Where(x => Code.Contains(x.Code) && category.Contains(x.category) && state.Contains(x.state) && general.Contains(x.general)); 
     //if you wish to check for any one 
     result = _db.Sample.Where(x => (Code != null && Code.Contains(x.Code)) || (category != null && category.Contains(x.category)) || (state != null && state.Contains(x.state)) || (general != null && general.Contains(x.general))); 


     if (result == null) 
     { 
      return null; 
     } 
     else 
     { 
      dt = Utility.ToDataTable(result.ToList()); 
     } 
     return dt; 
    } 
+0

但如果任何參數爲null,那麼它將不會執行查詢。我也想,如果其中任何一個包含值 –

+0

@OwaisAhmed我編輯了我的回答,以適應您的上述查詢 –

+1

@SethuBala,是的,從我身邊+1 .. –