2013-09-03 8 views
21

मेरे पास Employee तालिका और Office तालिका है। ये EmployeeOffices तालिका के माध्यम से कई से कई रिश्तों में शामिल हो गए हैं।SelectMany() टाइप तर्क को अक्षम नहीं कर सकता - क्यों नहीं?

मैं सभी कार्यालयों की एक सूची प्राप्त करना चाहता हूं जो एक विशेष कर्मचारी (CurrentEmployee) से जुड़ा हुआ है।

मैंने सोचा कि मैं कुछ इस तरह कर सकता है:

foreach (var office in CurrentEmployee.EmployeeOffices.SelectMany(eo => eo.Office)) 
    ; 

लेकिन यह मुझे त्रुटि देता है:

The type arguments for method 'System.Linq.Enumerable.SelectMany(System.Collections.Generic.IEnumerable, System.Func>)' cannot be inferred from the usage. Try specifying the type arguments explicitly.

मैं मैं प्रकार तर्क जोड़ सकते हैं समझते हैं। लेकिन इंटेलिसेंस पहचानता है कि eo.Office प्रकार का कार्यालय है। तो संकलक को यह स्पष्ट क्यों नहीं है?

उत्तर

33

आपके द्वारा SelectMany पर भेजे गए प्रतिनिधि द्वारा लौटाया गया प्रकार IEnumerable<TResult> होना चाहिए, लेकिन जाहिर है, Office उस इंटरफ़ेस को लागू नहीं करता है। ऐसा लगता है कि आपने सरल Select विधि के लिए SelectMany को उलझन में डाल दिया है।

  • SelectMany एक नए सेट में एकाधिक सेटों को फ़्लैट करने के लिए है।
  • Select एक स्रोत सेट में प्रत्येक तत्व को एक नए सेट में मैप करने के लिए एक-एक-एक मैपिंग के लिए है।

मुझे लगता है कि यह तुम क्या चाहते है:

foreach (var office in CurrentEmployee.EmployeeOffices.Select(eo => eo.Office)) 
+0

Do'h! आप सही हे। 'कर्मचारी कार्यालय' <-> 'कार्यालय का संबंध एक-से-एक है। मैं कुल मिलाकर कई सारे रिश्तों से उलझन में था। धन्यवाद! –

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