2012-11-27 14 views
5

where स्थिति कोई परिणाम नहीं देता है तो लौटाए गए संग्रह में डिफ़ॉल्ट मान कैसे डालें?linq का चयन करने के लिए डिफ़ॉल्ट मान अगर आइटम कुछ भी वापस नहीं किया गया है

from i in data.collection 
where i.Type == type 
select i.Count 
+2

आपको डिफ़ॉल्ट आइटम की आवश्यकता क्यों है? एक खाली संग्रह यहां समझ में आता है। – Rawling

+0

मुझे प्रत्येक लौटे हुए खाली परिणाम –

+0

के लिए '0' प्राप्त करने की आवश्यकता है मुझे राउलिंग से सहमत होना है ... शून्य गणना का अनुक्रम यहां स्पष्ट उम्मीदवार होगा, जब तक कि यह किसी भी तरह से –

उत्तर

18

ऐसा करने के लिए Enumerable.DefaultIfEmpty विधि का उपयोग करें।

उदाहरण (विधि वाक्य रचना में, क्योंकि यह IMHO कम अजीब है):

data.collection.Where(i => i.Type == type) 
       .DefaultIfEmpty(defaultObject) 
       .Select(i => i.Count); 
4

आप DefaultIfEmpty के लिए देख रहे हैं।

var itemCounts = from i in data.collection 
       where i.Type == type 
       select i.Count; 

var itemCountsOrMinusOne = itemCounts.DefaultIfEmpty(-1); 

पहले आप आइटम गणना दे देंगे, या एक IEnumerable कि कोई तत्व देता है।

दूसरा आपको आइटम गणना, या IEnuemrable देता है जो केवल -1 देता है।

8

DefaultIfEmpty() विधि है।

विधि वाक्य रचना में, आप इसे इस तरह उपयोग कर सकते हैं: Where फिल्टर कोई आइटम नहीं, एक एक आइटम yourDefaultValue साथ गणनीय Select प्रक्षेपण के लिए एक इनपुट के रूप में इस्तेमाल किया जाता है देता है

data.Collection 
    .Where(i => i.Type == type) 
    .DefaultIfEmpty(yourDefaultValue) 
    .Select(i => i.Count); 

हैं।

संबंधित मुद्दे