2012-03-15 13 views
8

पर गतिशील और OR linq अभिव्यक्ति वृक्ष का निर्माण कैसे करें previous प्रश्न के बाद मैंने पूछा, अब मैं यह समझने की कोशिश कर रहा हूं कि दोनों और & या क्वेरी दोनों के लिए गतिशील अभिव्यक्तियों को कैसे बनाया जाए।एक लूप

निम्नलिखित स्ट्रिंग सरणी को देखते हुए:

string[] ranges = new string[]{"0-100", "100-200", "500-1000"}; 

मैं गतिशील रूप से एक LINQ अभिव्यक्ति में इस व्यक्त करना चाहेंगे - की तर्ज पर कुछ:

var v = from p in products 
     where 
     (p.Amount >= 0 && p.Amount <= 100) || 
     (p.Amount >= 101 && p.Amount <= 200) || 
     (p.Amount >= 500 && p.Amount <= 1000) 
     select p; 

कैसे मैं गतिशील रूप से LINQ अभिव्यक्ति का निर्माण करते हैं इस लूप में?

string[] ranges = new string[]{"0-100", "100-200", "500-1000"}; 

var query = products.AsQueryable(); 

foreach (var item in ranges) 
{ 
    int min = int.Parse(item.Split('-').First()); 
    int max = int.Parse(item.Split('-').Last());     
    //Linq expression? 
} 

उत्तर

16

उपयोग predicate builder:

string[] ranges = new string[]{"0-100", "100-200", "500-1000"}; 
var predicate = PredicateBuilder.False<Product>(); 

foreach (var item in ranges) 
{ 
    int min = int.Parse(item.Split('-').First()); 
    int max = int.Parse(item.Split('-').Last());     
    predicate = predicate.Or(p => p.Amount >= min && p.Amount <= max); 
} 

सूचना कैसे हम false की बूलियन राज्य के साथ शुरू, और पाश में or एक साथ विधेय। इसके विपरीत, आप true और and की स्थिति के साथ भविष्यवाणी कर सकते हैं।

अंत में, यकीन नहीं करता है, तो इस क्वेरी समझ वाक्य रचना के साथ संभव है, लेकिन अपने अंतिम क्वेरी तो की तरह लग सकता है:

var v = products.Where(predicate); 
+0

धन्यवाद यह मुझे सही रास्ते पर नेतृत्व किया। मैं nuget पैकेज LINQKit को स्थापित करने के साथ समाप्त हुआ जिसमें भविष्य के निर्माता और अधिक शामिल हैं। यह उपयोगी है अगर आप ईएफ ऑब्जेक्ट्स के साथ काम कर रहे हैं। – Fixer