2009-02-25 14 views
11

पर संपत्ति जोड़ें निम्नलिखित में से एक लिंक क्वेरी परिणाम की वस्तुओं में कोई संपत्ति जोड़ने का कोई तरीका है?LINQ - परिणाम

var query = from x in db.Courses 
       select new 
       { 
        x.OldProperty1, 
        x.OldProperty2, 
        x.OldProperty3, 
        NewProperty = true 
       }; 

मैं अपने ऑब्जेक्ट के सभी मौजूदा गुणों को सूचीबद्ध किए बिना ऐसा करना चाहता हूं। कई गुण हैं, और जब भी मैं अपनी कक्षा बदल सकता हूं, मैं इस कोड को अपडेट नहीं करना चाहता हूं।

मैं अभी भी LINQ के साथ सीख रहा हूं और मैं आपके सुझावों की सराहना करता हूं।

var query = from x in db.Courses 
       select new 
       { 
        Course x, 
        NewProperty = true 
       }; 
+0

यह एक बेवकूफ सवाल है। मैं अब बेहतर जानता हूँ। ऑटो मैपिंग लाइब्रेरी बस होने वाली प्रतीक्षा कीड़े हैं। आलसी मत बनो। मैपिंग कोड लिखें। –

उत्तर

7

आंशिक वर्गों के साथ जोड़ें:

public partial class Courses 
{ 
    public String NewProperty { get; set; } 
} 

तो फिर तुम यह निर्दिष्ट कर सकते हैं तुम्हारे जाने के बाद वस्तु बना लिया है।

+0

यह संकलन समय है। प्रश्न चलाने के लिए सवाल नहीं है, इस प्रकार यह सवाल का वैध जवाब नहीं है? – peSHIr

+0

नहीं यह एक अच्छा जवाब है। –

+4

बेशक, यदि आप मूल श्रेणी के डिज़ाइन को बदलने के लिए जा रहे हैं (इसे आंशिक बनाने के लिए), तो आप आगे बढ़ सकते हैं और संपत्ति जोड़ सकते हैं ... –

6

मैं आप एक नया नया संपत्ति से बना वस्तु और चयनित ऑब्जेक्ट लौटा सकता है, की तरह लगता है।

यदि यह आपके लिए काम नहीं करता है (क्योंकि आपको परिणाम या आसपास के परिणाम पास करने की आवश्यकता है), और यह मानते हुए कि जिस श्रेणी से आप काम कर रहे हैं, वह पहले से ही उस संपत्ति को परिभाषित करता है जिसे आप सेट करना चाहते हैं, तो आप एक प्रतिलिपि बना सकते हैं या कारखाने विधि है कि एक मौजूदा उदाहरण प्लस संपत्ति के मूल्य आप सेट करना चाहते लेता है:,

var query = from x in db.Courses 
      select new Course(x, valueOfNewProperty); 

वैकल्पिक रूप से अगर Courseसंपत्ति को परिभाषित नहीं है, आपको इसे उपवर्ग सकता है और उपयोग करने के लिए एक ही दृष्टिकोण:

var query = from x in db.Courses 
      select new CourseWithExtraProperty(x, valueOfNewProperty); 

(जाहिर है, अपने उप-वर्ग के लिए बेहतर नाम चुनें)

फिर भी, जब तक आपको वास्तव में ऐसा करने की आवश्यकता न हो, तो ईकिंग के समाधान से चिपके रहें।

+2

मैं वास्तव में अपनी वर्तमान वस्तु में संपत्ति को "इंजेक्ट" करने के तरीके के लिए और अधिक देख रहा था। लेकिन धन्यवाद! –

4

eking के जवाब सबसे स्पष्ट दृष्टिकोण हो जाएगा:

1
  • ServiceStack एक built-in wayPopulateWith विधि के साथ इस संभाल करने के लिए है।

    • यहां एक code example है।

      foreach (var item in results) 
      { 
          var test1 = new ItemDto().PopulateWith(item); 
          test1.extraField1 = "extra"; 
          response.Add(test1); 
      }` 
      
  • और अगर आप ServiceStack उपयोग नहीं कर रहे हैं, आप हमेशा AutoMapper उपयोग कर सकते हैं।

    CreateMap<Foo, Bar>().ForMember(x => x.ExtraBarProperty, opt => opt.Ignore());

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