2010-02-24 12 views
5

मेरे पास निम्नलिखित तालिकाओं - व्यक्ति और ईमेल के साथ कई रिश्ते हैं। एसक्यूएल और ASP.Net MVC के लिए LINQ का उपयोग कर, मैं इस तरह मेरी व्यक्ति कोड का उपयोग कर ध्यान में रखते हुए पहले ईमेल या कोई रिक्त स्ट्रिंग दिखाना चाहते हैं:लिंक से एसक्यूएल का उपयोग कर रिक्त स्ट्रिंग लौटें - कोई पंक्ति वाली संबंधित तालिका - एएसपी.नेट एमवीसी

<%= Html.Encode(Model.Emails.FirstOrDefault().EmailAddress) %> 

मामलों में जहां कोई ईमेल पंक्तियों में देखते हैं , मुझे एक NullReferenceException प्राप्त होता है। मैं दृश्य या स्पोक का उपयोग कर एसक्यूएल से शून्य सुरक्षित मूल्य वापस कर सकता हूं, लेकिन मैं सिर्फ जेनेरिक linq के साथ तालिकाओं के लिए एसक्यूएल वस्तुओं के साथ चिपकना चाहता हूं।

उत्तर

8
Model.Emails.Select(x => x.EmailAddress).FirstOrDefault() ?? string.Empty 
+0

बहुत बहुत धन्यवाद, यह सही है! – jlnorsworthy

1
<%= Html.Encode((Model.Emails.FirstOrDefault() ?? new Email { EmailAddress = string.Empty }).EmailAddress) %> 

काम करेंगे, सुपर हालांकि पढ़ने के लिए साफ नहीं।

+0

आपके उत्तर के लिए धन्यवाद, उपर्युक्त लगभग समान है लेकिन थोड़ा और संक्षिप्त – jlnorsworthy

+0

यह दूसरों की तुलना में बेहतर है। 'कारण सभी तरीकों पर चयन विधियां लूपिंग कर रही हैं और यह प्रदर्शन के लिए अच्छा नहीं है। – cem

1

के लिए मेरा वोट:

Model.Emails.Select(z => z.EmailAddress).DefaultIfEmpty("zzz").FirstOrDefault(); 

मैंने सोचा कि आप यह सब FirstOrDefault अंदर कर सकता है कि, लेकिन मैं गलत-ओ था! हालांकि, मैं यह भी भूल गया कि जब आप DefaultIfEmpty का उपयोग करते हैं तो आप केवल पहले() को कॉल कर सकते हैं।

Model.Emails.Select(z => z.EmailAddress).DefaultIfEmpty("zzz").First(); 

बेशक, सिर्फ "" साथ ZZZ की जगह (नहीं string.empty, कि अनावश्यक है), लेकिन यह उन रिकॉर्ड जहां डिफ़ॉल्ट स्पष्ट रूप से चुना जा रहा है तो उसे पहली बार लिख रहे हैं देखने के लिए अच्छा है।

+0

बोनस यह भी vb.net में काम करता है! –

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