2013-03-06 10 views
8

का उपयोग कर मैं इस तरह एक वर्ग संरचना कुछ है ।वस्तु का चयन करें Linq

उदाहरण के लिए, SomeProperty== 'A'MyClassObj.AttributeGroup[0] और MyClassObj.AttributeGroup[5] दोनों में पाया जा सकता है और मैं एक Linq लिखने के लिए (या ऐसा ही कुछ) इन दो अलग अलग attributegroups से दो वस्तुओं को लाने के लिए की जरूरत है।

कोई सुझाव?

उत्तर

20

सबसे पहले सभी विशेषता समूहों से सभी विशेषताओं का चयन करें, फिर केवल अपनी संपत्ति के साथ चयन करें।

IEnumerable<Attribute> attributes = 
    myClassInstance 
     .AttributeGroups 
     .SelectMany(x => x.Attributes) 
     .Where(x => x.SomeProperty == 'A'); 

अन्य Linq शैली वाक्य रचना:

IEnumerable<Attribute> attributes = 
    from attributeGroup in myClassInstance.AttributeGroups 
    from attribute in attributeGroup.Attributes 
    where attribute.SomeProperty == 'A' 
    select attribute; 
+0

'समूह' एक कीवर्ड है -' @ समूह 'का उपयोग करें या इस श्रेणी परिवर्तनीय का नाम बदलें –

+0

धन्यवाद, मैं इसे तुरंत ठीक कर दूंगा। – JustAnotherUserYouMayKnow

+0

दूसरी शैली बेकार ढंग से काम किया। धन्यवाद। – ZooZ

0

आपका उदाहरण स्पष्ट नहीं है; मैं यह नहीं बता सकता कि आपका क्या मतलब है, "इन दो अलग-अलग विशेषता समूहों से दो वस्तु"। मुझे लगता है कि चल जाएगा कि आप समूहों सवाल में संपत्ति के साथ गुण है कि चाहते हैं:

from g in MyClassObj.AttributeGroups 
where g.Any(attr => attr.SomeProperty == "A") 
select g 
+2

वह दो विशेषता-वस्तुएं चाहता है जो इस स्थिति में फिट हों, इससे कोई फर्क नहीं पड़ता कि वे किस समूह में हैं। यह वास्तव में बहुत स्पष्ट है। – JustAnotherUserYouMayKnow

2

SelectMany (http://msdn.microsoft.com/en-us/library/bb534336.aspx) पर एक नज़र डालें।

उदाहरण के लिए:

myClassObjs.SelectMany(o => o.AttributeGroups.SelectMany(g => g.Attributes)).Where(a => a.SomeProp == "A") 

इस लाइन का चयन करता है सब सब MyClass वस्तुओं के लिए जहां SomeProp 'ए' के ​​बराबर होती है के सभी AttributeGroups की वस्तुओं का श्रेय दें। एक प्रकार के गुण के लिए लैम्ब्डा अभिव्यक्ति में एक कहां है।

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