LINQ

2009-10-19 14 views
215

में फ़्लैटन सूची मेरे पास एक LINQ क्वेरी है जो IEnumerable<List<int>> लौटाती है लेकिन मैं केवल List<int> लौटना चाहता हूं, इसलिए मैं अपने सभी रिकॉर्ड को IEnumerable<List<int>> में केवल एक सरणी में विलय करना चाहता हूं।LINQ

उदाहरण:

IEnumerable<List<int>> iList = from number in 
    (from no in Method() select no) select number; 

मैं इसलिए केवल एक List<int>

करने के लिए अपने सभी परिणाम IEnumerable<List<int>> लेने के लिए, स्रोत सरणियों से हैं: [1,2,3,4] और [5,6 , 7]

मैं चाहता हूँ केवल एक सरणी [1,2,3,4,5,6,7]

धन्यवाद

उत्तर

386

SelectMany()

var result = iList.SelectMany(i => i); 
+4

धन्यवाद, मैं हमेशा इस एक भूल - मैं जानता हूँ कि यह वहाँ है, लेकिन जब भी मुझे इसका इस्तेमाल करने की ज़रूरत होती है, तो मैं बस इतना समय बिताता हूं। इस जवाब को बुकमार्क करना :-) – BrainSlugs83

+0

थोड़ी देर के लिए मुझे डर था कि मैं अकेला था जिसकी कभी आवश्यकता थी। धन्यवाद माइक! –

+1

क्या 'selectMany (i => i) 'के लिए कुछ वैकल्पिक वाक्यविन्यास है? मैंने यह वाक्यविन्यास बहुत उपयोग किया है, लेकिन यह चुनिंदा सुविधा का अपमानजनक उपयोग प्रतीत होता है, इसलिए मुझे उम्मीद है कि भाषा डिजाइनर विशेष रूप से सूचियों की सूची के लिए शॉर्टकट सिंटैक्स के साथ आते हैं – Andy

7

इस तरह का प्रयास करें?

var iList = Method().SelectMany(n => n); 
+0

हाँ –

6

आप एक List<List<int>> k है, तो आप कर सकते हैं

List<int> flatList= k.SelectMany(v => v).ToList(); 
19
iList.SelectMany(x => x).ToArray() 
+6

@recursive के उत्तर के लिए धन्यवाद सबको क्या याद आया? '.ToArray()'? - यह एक तरह का परिस्थिति है - यदि आपको केवल एक बार फिर से शुरू करने की आवश्यकता है - या यदि वस्तुओं को बदलने की संभावना है, तो '.ToArray()' निश्चित रूप से आप जो चाहते हैं वह नहीं है। लेकिन स्थिर वस्तुओं के साथ जो आप कई बार गिनने जा रहे हैं, 'टॉलिस्ट()' या 'टोएएरे()' एक प्रदर्शन सुधार देगा (थोड़ा अधिक मेमोरी उपयोग की लागत पर, जो आमतौर पर एक बहुत अच्छा सौदा है)। – BrainSlugs83

+2

संभावित रूप से इस मामले की परिस्थितियों में सरणी की आवश्यकता होती है, क्योंकि यह प्रश्न में निर्दिष्ट था। – recursive

+7

@recursive, अगर हम नाइटपिक कर रहे हैं, तो ओपी कहता है कि उसे 'सूची ' वापस करने की आवश्यकता है, इसलिए '। टॉलिस्ट()' सही विकल्प होगा। वैकल्पिक वाक्यविन्यास – MEMark

70
क्वेरी सिंटैक्स के साथ

:

var values = 
from inner in outer 
from value in inner 
select value; 
+3

+1 धन्यवाद सटीक वाक्यविन्यास मैं देख रहा था, और इतने सारे SO उत्तर कुछ और वर्बोज़ सूचीबद्ध करते हैं। –

+0

के लिए – SilverSideDown

+0

यह SelectMany से काफी बेहतर है। आईएमओ पर क्या हो रहा है, यह स्पष्ट है कि इसे इंगित करने के लिए धन्यवाद! –

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