2012-05-17 18 views
36

मैं इस संरचनाLINQ समूह के आधार पर का चयन करें और संग्रह

Customer 
- has many Orders 
    - has many OrderItems 

है मैं LINQ के माध्यम से CustomerItems की एक सूची उत्पन्न करने के लिए OrderItems के एक सबसेट दी हैं:

List of new { Customer, List<OrderItem> Items } 

जो सभी का समूह होता है आइटम को आइटम के सबसेट से आदेश दिया गया है

मैं इस ऑब्जेक्ट को उत्पन्न करने के लिए ग्राहक द्वारा आदेश और समूह के माध्यम से वापस ट्रैक करने के लिए LINQ का उपयोग कैसे कर सकता हूं?

अब तक मैं

items 
.GroupBy(i => i, i => i.Order.Customer, (i, customer) => new {customer, i}) 

की तरह कुछ पर हूँ लेकिन जाहिर है thats एक सूची नहीं। मुझे लगता है कि मुझे कहीं कहीं एक SelectMany की जरूरत है, लेकिन कुछ पॉइंटर्स के साथ कर सकता है।

उत्तर

69

मुझे लगता है कि आप चाहते हैं:

items.GroupBy(item => item.Order.Customer) 
    .Select(group => new { Customer = group.Key, Items = group.ToList() }) 
    .ToList() 

आप उपयोग GroupBy आप वर्तमान में उपयोग कर रहे हैं अधिभार जारी रखना चाहते हैं, तो आप कर सकते हैं:

items.GroupBy(item => item.Order.Customer, 
       (key, group) => new { Customer = key, Items = group.ToList() }) 
    .ToList() 

... लेकिन मैं व्यक्तिगत रूप से लगता है कि कम स्पष्ट।

+0

की तरह आप ToList() कॉल की जरूरत समूह पर करते हैं? क्या आखिरी ToList() पर्याप्त नहीं होगा? –

+0

@Ani - हाँ मुझे –

+2

@ जोना से सहमत होना होगा: ओपी की आवश्यकताओं के अनुसार, अज्ञात प्रकार की 'आइटम' संपत्ति एक सूची होनी चाहिए। – Ani

2

आप समूह के साथ यह हासिल कर सकते हैं में शामिल होने के

var result = (from c in Customers 
      join oi in OrderItems on c.Id equals oi.Order.Customer.Id into g 
      Select new { customer = c, orderItems = g}); 

ग ग्राहक है और जी ग्राहकों आइटम आदेश है।

3

आप कर सकते हैं भी इस

var Grp = Model.GroupBy(item => item.Order.Customer) 
     .Select(group => new 
     { 
      Customer = Model.First().Customer, 
      CustomerId= group.Key, 
      Orders= group.ToList() 
     }) 
     .ToList(); 
+0

यह क्यों है 'item.Field <>' प्राप्त करें और उदाहरण के लिए 'ऑर्डर' नहीं है? मैं डेटाटेबल का उपयोग कर रहा हूं। – Si8

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