क्या Linq में कोई तरीका है जहाँ आप SQL स्ट्रिंग्स बनाने के लिए "... जहाँ (a = 1) OR (a = 2)" का उपयोग कर सकते हैं?
जवाबों:
आप निश्चित रूप से इसे एक क्लॉज (विस्तार विधि) के भीतर कर सकते हैं। यदि आपको गतिशील रूप से एक जटिल क्वेरी बनाने की आवश्यकता है, हालांकि, आप एक PredicateBuilder का उपयोग कर सकते हैं ।
var query = collection.Where( c => c.A == 1 || c.B == 2 );
या एक PredicateBuilder का उपयोग कर
var predicate = PredicateBuilder.False<Foo>();
predicate = predicate.Or( f => f.A == 1 );
if (allowB)
{
predicate = predicate.Or( f => f.B == 1 );
}
var query = collection.Where( predicate );
आप अपने एकल खंड में मानक .NET बूलियन ऑपरेटरों का उपयोग कर सकते हैं:
MyDataSource.Where(data => data.a == 'a' || data.a == 'b')
अपने .Where()
कॉल में मानक बूलियन 'या' ऑपरेटर का उपयोग करें ||
।
var query = items.Where(item => (item == 1 || item == 2));
सभी जहां कॉल करता है वह एक बूलियन है जो आप चाहते हैं, उसकी तुलना में है, इसलिए आप इसे अपनी इच्छानुसार अधिक सशर्त तर्क के साथ भर सकते हैं।
यदि आप पैरामीटर गणना नहीं जानते हैं, तो आप इसका उपयोग कर सकते हैं:
नमूना डेटा
var parameters= new List<string>{"a","d"};
var sampledata = new Dictionary<string,string>();
sampledata["a"] = "A";
sampledata["b"] = "B";
sampledata["c"] = "C";
sampledata["d"] = "D";
कोड
var query = sampledata.AsQueryable();
var firstItemKey = sampledata.FirstOrDefault().Key;
var queryresult= sampledata.Where(x => x.Key == firstItemKey).AsQueryable();
foreach (var parameter in parameters.Skip(1))
{
queryresult=queryresult.Concat(query.Where(x => x.Key == parameter));
}
var result = queryresult.ToList();
यह अभी .net में बनाया गया है, सुनिश्चित नहीं है कि यह पहले नहीं था। एक मौजूदा Linq क्वेरी को देखते हुए आप एक ऐसा क्लॉज जोड़ सकते हैं जो स्ट्रिंग्स (SearchStrings) की एक सरणी लेता है, और जाँच करें कि उनमें से कोई भी आपके द्वारा संग्रह में मौजूद किसी भी वस्तु से मेल खाता है या नहीं। ToLower () का उपयोग करने से यह सुनिश्चित होता है कि आप SQL प्रश्नों में केस सेंसिटिविटी से बचते हैं।
query.Where(i => SearchStrings.Any(s => i.ToLower().Contains(s.ToLower()));
आप संग्रह के ऑब्जेक्ट में सभी शब्दों को जोड़कर 'और' विधेय के लिए एक ही काम कर सकते हैं।
query.Where(i => SearchStrings.All(s => i.ToLower().Contains(s.ToLower()));
इस उदाहरण में मैं एक संग्रह में प्रत्येक वस्तु से संबंधित है, और SearchStrings सरणी में प्रत्येक स्ट्रिंग से सहसंबंध रखता है।
||
करना है और कुछ गतिशील चाहते हैं, जैसेa=a.where(hour=> hour<20); if(weekend) a=a.where(hour=> hour>6);
। आप अधिक स्पष्ट रूप से