2012-06-14 8 views
6

मैं कर रहा हूं 'linq में sql में शामिल हो गया है, इसलिए मेरा प्रश्न सही तालिका फ़ील्ड का चयन करते समय है, मैं प्रत्येक फ़ील्ड wheather में शामिल ऑब्जेक्ट की जांच कर रहा हूं शून्य है या नहीं, क्या यह सही तरीका है? या क्या ऐसा करने का कोई और तरीका है? मेरी क्वेरी की तरहlinq से sql में शामिल होने के लिए, दाएं तालिका के लिए शून्य की जांच करने की आवश्यकता है

from u in user 
join x in employeee on u.id equals x.userId 
     into ux from ujoinx in ux.DefaultIfEmpty() 
join y in department on x.id equals y.employeeId 
     into xy from xjoiny in xy.DefaultIfEmpty() 
select new { 
    EmployeeSal = ujoinx!=null?ujoinx.employeeSal:0, // see checkig for null 
    EmployeeTax = ujoinx!=null?ujoinx.employeeTax:0, // in this 3 lines 
    UserName = u.username, 
    DeptName = xjoiny!=null?xjoiny.name:""   //is this a correct way ? 
} 

जवाब ठीक से परिणामी क्वेरी है, लेकिन अगर मैं न अशक्त अपने फेंकने object reference not set.....error के लिए उन कुछ क्षेत्रों की जाँच करें। यहां DefaultIfEmpty() वास्तव में क्या है ??

उत्तर

3

आपने जो किया है वह सही है।

msdn से, DefaultIfEmpty रिटर्न:

एक IEnumerable < टी > उद्देश्य यह है कि TSource प्रकार यदि स्रोत खाली है के लिए डिफ़ॉल्ट मान होता है; अन्यथा, स्रोत।

दूसरे शब्दों में, जब संग्रह खाली होता है, तो यह टी के लिए डिफ़ॉल्ट मान वापस कर देगा। संदर्भ प्रकारों के लिए डिफ़ॉल्ट मान शून्य है - यही कारण है कि जब आप DeptName चुनते हैं तो आपको शून्य की जांच करनी चाहिए।

+0

धन्यवाद, वास्तव में मेरे पास बड़ी संख्या में फ़ील्ड हैं, क्योंकि प्रत्येक फ़ील्ड को नल आईएम महसूस करने के लिए थोड़े गंदे प्रोग्रामिंग की जांच करनी है, इसलिए सोचा कि ऐसा करने का कोई और तरीका है .. – Meson

0

डिफ़ॉल्ट मामले इस मामले में लक्षण आपको उद्घोषणा के बाईं ओर एक शून्य वस्तु देता है। इस प्रकार ujoinx.employeeSal को कॉल करने का प्रयास ऑब्जेक्ट संदर्भ कोई सेट वापस नहीं करेगा क्योंकि ujoinx शून्य है।

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