मुझे पता है कि यह एक पुराना सवाल है और स्वीकृत उत्तर काम करता है, लेकिन इस सवाल ने मेरे सवाल का जवाब दिया कि क्या इस तरह के खाली सेट का अपवाद होगा या default(int)
परिणाम।
हालाँकि, स्वीकृत जवाब, जबकि यह काम करता है, आदर्श समाधान IMHO नहीं है, जो यहाँ नहीं दिया गया है। इस प्रकार मैं इसे अपने स्वयं के उत्तर में प्रदान कर रहा हूं जो किसी को भी इसके लाभ के लिए देख रहा है।
ओपी का मूल कोड था:
int maxShoeSize = Workers.Where(x => x.CompanyId == 8).Max(x => x.ShoeSize);
इसे मैं अपवादों को रोकने और डिफ़ॉल्ट परिणाम प्रदान करने के लिए लिखूंगा:
int maxShoeSize = Workers.Where(x => x.CompanyId == 8).Max(x => x.ShoeSize as int?) ?? 0;
यह Max
फ़ंक्शन के रिटर्न प्रकार का कारण बनता है int?
, जो null
परिणाम की अनुमति देता है और फिर परिणाम के साथ ??
बदलता है । null
0
संपादित करें
केवल टिप्पणियों से कुछ स्पष्ट करने के लिए, एंटिटी फ्रेमवर्क वर्तमान में as
कीवर्ड का समर्थन नहीं करता है , इसलिए ईएफ के साथ काम करते समय इसे लिखने का तरीका होगा:
int maxShoeSize = Workers.Where(x => x.CompanyId == 8).Max<[TypeOfWorkers], int?>(x => x.ShoeSize) ?? 0;
चूंकि [TypeOfWorkers]
एक लंबा वर्ग नाम हो सकता है और लिखने के लिए थकाऊ है, इसलिए मैंने मदद करने के लिए एक विस्तार विधि जोड़ी है।
public static int MaxOrDefault<T>(this IQueryable<T> source, Expression<Func<T, int?>> selector, int nullValue = 0)
{
return source.Max(selector) ?? nullValue;
}
यह केवल हैंडल int
, लेकिन एक ही के लिए किया जा सकता है long
, double
या किसी भी अन्य मान प्रकार आप की जरूरत। इस विस्तार विधि का उपयोग करना बहुत सरल है, आप बस अपने चयनकर्ता फ़ंक्शन में पास होते हैं और वैकल्पिक रूप से शून्य के लिए उपयोग किए जाने वाले मान को शामिल करते हैं, जो कि 0. के लिए चूकता है। इसलिए उपरोक्त को फिर से लिखा जा सकता है:
int maxShoeSize = Workers.Where(x => x.CompanyId == 8).MaxOrDefault(x => x.ShoeSize);
उम्मीद है कि इससे लोगों को और भी मदद मिलेगी।