2016-01-29 7 views
12

के लिए मैं इस प्रकार एक पाश की है।Linq नेस्टेड लूप

मैं एक LINQ-statement की तलाश में हूं लेकिन मुझे इस पर अनिश्चितता है। मैं

result = myColl 
    .SelectMany(x => x.MyList) 
    .SelectMany(x => /* how to get the key of the outer loop here */ + x) 
+3

नेस्टेड पढ़ने में आसान है, जहां एक LINQ क्वेरी अधिक अस्पष्ट हो सकता है पसंद करते हैं है। आपको लगता है कि आपको इस मामले में linq का उपयोग करने की आवश्यकता क्यों है? – Loofer

उत्तर

14

इस क्वेरी भाव के साथ आसान है:

(from x in myColl 
from y in x.MyList 
select x.MyKey + y).ToList() 

यह काम करता है क्योंकि यह करने के लिए अनुवाद:

myColl 
.SelectMany(x => x.MyList.Select(item => new { List = x, Item = item })) 
.Select(x => ...) //rest of the query, whatever you like 

कुंजी है दोनों सूची के साथ ही सूची आइटम रखें। अज्ञात प्रकार (या किसी अन्य कंटेनर) का उपयोग कर क्वेरी के माध्यम से उन्हें चैनल करें।

+0

आपको अज्ञात गुणों का नाम देने की आवश्यकता है। –

+0

उन्हें अभिव्यक्ति से अपना डिफ़ॉल्ट नाम मिलता है। यह काम करता है। संपादन के लिए धन्यवाद। – usr

+0

मुझे पूरा यकीन है कि दूसरा 'SelectMany' सिर्फ' चयन 'होना चाहिए, या यह टॉर्मोड के उत्तर में' SelectMany' अधिभार में अनुवाद करने की संभावना है। – juharr

5

का उपयोग करके इसे करने की कोशिश कर रहे एक overload of SelectMany जो "जनक" तत्व के लिए उपयोग की अनुमति देता है। ListOfList.SelectMany (सूची => list.InnerList, (lst, तत्व) => HandleInnerListAndElementFromIt (lst, तत्व))

result = myColl.SelectMany(x => x.MyList,(x1,x2)=>DoSomething(x1,x2)); 

संपादित जोड़ा गया:

अपने ठोस उदाहरण के लिए यह इस तरह दिखता है : SelectMany विधि कॉल करने के लिए दो लैम्ब्डा पैरामीटर देखते हैं

result = myColl.SelectMany(x=>x.MyList,(x,y)=>x.MyKey+y)); 

सूचना है कि।

पहला लैम्ब्डा "एक्स" लेगा और एक नया अंकुरित करेगा। x => x.MyList

दूसरा लैम्ब्डा "एक्स" और "वाई" लेता है और एक नया परिणाम उत्पन्न करता है। (एक्स, वाई) => x.MyKey + y

+1

मुझे स्वीकार करना है, हालांकि यह अच्छा लग रहा है और जो मुझे चाहिए उसे पढ़ने के लिए काफी मुश्किल है। – HimBromBeere

+0

मैं इसे देख सकता हूं। मैंने स्पष्टता के लिए संपादित किया। सौभाग्य। – Tormod

4

यह जब मैं व्यक्तिगत रूप से क्वेरी सिंटैक्स

var result = from x in myCol1 
      from y in x.MyList 
      select x.MyKey + y; 
प्रत्येक के लिए
+0

इतना आसान ... मुझे पता था कि यह काम करना चाहिए। धन्यवाद :) – HimBromBeere

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