2009-11-12 18 views
22

तो मैं इस क्वेरी काम करLINQ कहाँ से और OR शर्त

List<string> listStatus = new List<string>() ; 
listStatus.add("Text1"); 

List<string> listMerchants = new List<string>() ; 
listMerchants.add("Text2"); 


from item in db.vw_Dropship_OrderItems 
      where listStatus.Contains(item.StatusCode) 
         && listMerchants.Contains(item.MerchantId) 
      select item; 

यहाँ मैं अगर listStatus और listMerchants अशक्त नहीं हैं जाँच करने के लिए चाहते हैं पाने के लिए उसके बाद ही उन्हें कहां खंड के अंदर डाल कामयाब रहे।

अगर listMerchants रिक्त है की तरह फिर क्वेरी

तरह
 where listStatus.Contains(item.StatusCode) 

मैं स्विच या अगर हालत का उपयोग नहीं करना चाहते हो जाएगा।

धन्यवाद

उत्तर

27
from item in db.vw_Dropship_OrderItems 
    where (listStatus != null ? listStatus.Contains(item.StatusCode) : true) && 
    (listMerchants != null ? listMerchants.Contains(item.MerchantId) : true) 
    select item; 

अजीब व्यवहार दे सकता है अगर दोनों listMerchants और listStatus दोनों अशक्त हैं।

+0

उफ़ नीचे के रूप में कर सकते हैं; मुझे इससे पहले मिला –

+0

मुझे सूची करना था Status.Count == 0 शून्य की बजाय – Zeus

5

ठीक है, आपको कहीं नल की जांच करनी होगी। आप की तरह कुछ कर सकता है: लैम्ब्डा अभिव्यक्ति का उपयोग करके साथ

from item in db.vw_Dropship_OrderItems 
     where (listStaus == null || listStatus.Contains(item.StatusCode)) 
      && (listMerchants == null || listMerchants.Contains(item.MerchantId)) 
     select item; 
0

Linq या स्थिति आप

DataTable dtEmp = new DataTable(); 

dtEmp.Columns.Add("EmpID", typeof(int)); 
dtEmp.Columns.Add("EmpName", typeof(string)); 
dtEmp.Columns.Add("Sal", typeof(decimal)); 
dtEmp.Columns.Add("JoinDate", typeof(DateTime)); 
dtEmp.Columns.Add("DeptNo", typeof(int)); 

dtEmp.Rows.Add(1, "Rihan", 10000, new DateTime(2001, 2, 1), 10); 
dtEmp.Rows.Add(2, "Shafi", 20000, new DateTime(2000, 3, 1), 10); 
dtEmp.Rows.Add(3, "Ajaml", 25000, new DateTime(2010, 6, 1), 10); 
dtEmp.Rows.Add(4, "Rasool", 45000, new DateTime(2003, 8, 1), 20); 
dtEmp.Rows.Add(5, "Masthan", 22000, new DateTime(2001, 3, 1), 20); 


var res2 = dtEmp.AsEnumerable().Where(emp => emp.Field<int>("EmpID") 
      == 1 || emp.Field<int>("EmpID") == 2); 

foreach (DataRow row in res2) 
{ 
    Label2.Text += "Emplyee ID: " + row[0] + " & Emplyee Name: " + row[1] + ", "; 
} 
संबंधित मुद्दे