2009-11-09 11 views
6

मेरे पास ऑब्जेक्ट्स की एक सूची है जिसे मैं एक सूचीदृश्य से जुड़ने की कोशिश कर रहा हूं। मैं दो गुणों से छंटनी कर रहा हूं। समस्या मौजूद है जिससे कुछ रिकॉर्ड गुणों में से एक नहीं हो सकता है। यह एक त्रुटि पैदा कर रहा है। मैं चाहता हूं कि यह अभी भी उन रिकॉर्ड्स को बांधें जो संपत्ति है।जांचें कि क्या संपत्ति लैम्ब्डा अभिव्यक्ति में शून्य है

IEnumerable<ERec> list = retailerList.Cast<ERec>(); 
lvwRetailStores.DataSource = list.OrderByDescending(r => r.Properties["RS_Partner Type"].ToString()) 
           .ThenBy(r => r.Properties["RS_Title"].ToString()); 
+0

क्या आप चाहते हैं कि रिकॉर्डेड सूची की शुरुआत या अंत में संपत्ति खो जाए? – outis

उत्तर

7
list.Where(r => r.Properties["RS_Partner_Type"] != null && r.Properties["RS_Title"] != null) 
    .OrderByDescending(r => r.Properties["RS_Partner Type"].ToString()) 
    .ThenBy(r => r.Properties["RS_Title"].ToString()); 

या बजाय! = अशक्त, उपयोग जो कुछ परीक्षण गुण संग्रह है।

0

आप लैम्ब्डा में एक त्रिगुट अभिव्यक्ति का उपयोग कर सकते हैं:

list.OrderByDescending(r => r.Properties["RS_Partner_Type"] == null ? null : r.Properties["RS_Partner Type"].ToString()) 
    .ThenBy(r => r.Properties["RS_Title"] == null ? null : r.Properties["RS_Title"].ToString()); 
+0

मुझे ध्यान रखना चाहिए, एक बार जब लैम्ब्डा लंबे समय से शुरू हो जाते हैं तो कोड को साफ करने के लिए उन्हें एक घोषित करने के लिए एक अच्छा विचार है। – Serguei

0

एक अन्य आम दृष्टिकोण संग्रह एक उपयुक्त डिफ़ॉल्ट मान दे रहा है, और वापसी कि संग्रह एक विशेष कुंजी नहीं है जब। उदाहरण के लिए, यदि Properties लागू करता IDictionary,

public static class IDictionaryExtension { 
    public static TValue GetValue<TKey, TValue>(this IDictionary<TKey, TValue> dict, TKey key, TValue default) { 
     TValue result; 
     return dict.TryGetValue(key, out result) ? result : dflt; 
    } 
} 
... 
lvwRetailStores.DataSource = list.OrderByDescending(r => r.GetValue("RS_Partner Type", "").ToString()) 
           .ThenBy(r => r.GetValue("RS_Title","").ToString()); 
1

मुझे लगता है कि मिल गया है ?? ऑपरेटर अच्छी तरह से काम करता है। मैं,

उदाहरण के लिए अशक्त के लिए मूल्यांकन करने के लिए कोष्ठक का उपयोग करें:

Datetime? Today = DateTimeValue // Check for Null, if Null put Today's date datetime GoodDate = Today ?? DateTime.Now

यह वही तर्क लैम्ब्डा में काम करता है, बस कोष्ठक का उपयोग सुनिश्चित करना है कि सही तुलना किया जाता है।

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