2017-09-18 47 views
9

का उपयोग करके समूह में सहायता की आवश्यकता है मेरे पास मेरे कोड में कक्षाओं और कक्षा 2 की एक सूची है। मैं LINQ का उपयोग कर सूची तत्वों को date और ID द्वारा समूहित करना चाहता हूं।LINQ में C#

public class Class1 
{ 
    public string ID; 
    public int y; 
    public int z; 
} 

public class Class2 
{ 
    public List<Class1> a; 
    public int p, q; 
    public string s; 
    public DateTime date; 
} 

मेरी सूची में इस के समान है:

List<Class2> object1 = new List<Class2> 
{ 
    new Class2 {p = 5, q = 6, date = DateTime.Now, a = new List<Class1> { new Class1 { ID = "3643746HDJ", y = 0, z = 9 }, new Class1 { ID = "746327846HDJ", y = 0, z = 9 } } }, 
    new Class2 {p = 5, q = 6, date = DateTime.Now.AddDays(1), a = new List<Class1> { new Class1 { ID = "3643746HDJ", y = 0, z = 9 }, new Class1 { ID = "746327846HDJ", y = 0, z = 9 } } }, 
    new Class2 {p = 5, q = 6, date = DateTime.Now.AddDays(2), a = new List<Class1> { new Class1 { ID = "3643746HDJ", y = 0, z = 9 }, new Class1 { ID = "746327846HDJ", y = 0, z = 9 } } }, 
    new Class2 {p = 5, q = 6, date = DateTime.Now.AddDays(3), a = new List<Class1> { new Class1 { ID = "3643746HDJ", y = 0, z = 9 }, new Class1 { ID = "746327846HDJ", y = 0, z = 9 } } }, 
}; 

क्षमा करें अगर यह एक बेवकूफ सवाल है, लेकिन मैं सी # प्रोग्रामिंग और LINQ में अभी शुरुआत कर रहा हूँ और मुझे यकीन है कि अगर यह भी संभव है नहीं कर रहा हूँ। इसकी सही नहीं

var newList = from item in object1 
       group new 
       { 
        item.s, 
        item.a[0].x, //I think its wrong because of this 
        item.a[0].y //and this 
       } 
       by new 
       { 
        item.date, 
        item.a[0].ID //and this 
       } 
       into temp 
       select temp; 

जब से मैं समूहीकरण मैं अपने अंतिम सूची में तत्वों का एक बहुत याद आ रही है में सूचकांक 0 hardcoded है

यह है कि मैं क्या मैं वेब पर देखा उदाहरण लेकिन के आधार पर की कोशिश की है है। Class2 में सूची a के सभी तत्वों के लिए मैं यह कैसे कर सकता हूं?

Key: {date: 19-09-2017 ID: 3643746HDJ}, Element: {{s: "abc", y = 1, z = 2}, {s: "pqr", y = 2, z = 4}, {s: "abc", y = 1, z = 2}} 
Key: {date: 20-09-2017 ID: 3643746HDJ}, Element: {{s: "pop", y = 1, z = 2}, {s: "dfr", y = 2, z = 4}, {s: "abc", y = 1, z = 2}} 
Key: {date: 19-09-2017 ID: 746327846HDJ}, Element: {{s: "abc", y = 7, z = 8}, {s: "asar", y = 2, z = 111}, {s: "abc", y = 1, z = 2}} 
Key: {date: 20-09-2017 ID: 746327846HDJ}, Element: {{s: "abc", y = 7, z = 8}, {s: "asar", y = 2, z = 111}, {s: "abc", y = 1, z = 2}} 
+1

क्या आपके वर्ग वास्तव में ऐसा दिखते हैं? जैसा कि आप गुणों के बजाय सार्वजनिक क्षेत्रों का उपयोग कर रहे हैं? – maccettura

+5

क्या आप अपेक्षित आउटपुट दिखा सकते हैं? – Fabio

+0

कौन सा 'सूची' तत्व? जब आप 'सूची ए' में एकाधिक 'आईडी' रखते हैं तो आप 'आईडी' द्वारा समूह की अपेक्षा कैसे करते हैं? – NetMage

उत्तर

3

आपका प्रश्न राज्यों:

अपेक्षित उत्पादन इस के समान है

जब से मैं समूह में सूचकांक 0 hardcoded है मैं मेरा अंतिम सूची में तत्वों का एक बहुत याद आ रही है । मैं के लिए कक्षा 2 में सूची के सभी तत्वों के लिए यह कैसे कर सकता हूं?

जैसा कि आप नेस्टेड संग्रह से सभी आइटम चाहते हैं, आपको समूहबद्ध करने से पहले नेस्टेड संग्रहों को फ़्लैट करना होगा।

var result = from item in object1 
      from nested in item.a 
      group new { item.s, nested.y, nested.z } by new { item.date, nested.ID } into g 
      select g; 

प्रत्येक नेस्टेड वस्तु एक p और q गुण नहीं है के रूप में, लेकिन अपने कोड के बजाय नेस्टेड आइटम और z मैं y इस्तेमाल किया पहुँचने के

यह कर सकते हैं पता चलता है: क्वेरी सिंटैक्स में तो एक और from का उपयोग कर विधि वाक्यविन्यास का उपयोग करके भी किया जा सकता है। नेस्टेड संग्रहों को फ़्लैट करने के लिए SelectMany का उपयोग करें। GroupBy के लिए आप अधिभार का उपयोग कर सकते हैं जहां आप दोनों कुंजी और तत्व चयनकर्ता निर्दिष्ट करते हैं। उस के लिए सामान्य विचार:

  • :

    var result = object1.SelectMany(item => item.a.Select(nested => new {item, nested })) 
            .GroupBy(key => new { key.item.Date, key.nested.Id }, 
              val => new { val.item.s, val.nested.x, val.nestd.y }); 
    

    यहां तक ​​कि यह ऐसा लगता है, हालांकि केवल सवाल प्रयोजनों के लिए ही मैं गुण और चर और के लिए सार्थक नाम देने की सलाह देते हैं पर एक नजर है करने के लिए है MSDN Naming Conventions

  • Dofactory
+0

बढ़िया! यह वही करता है जो मैं चाहता था। इन लिंक के लिए और मदद के लिए धन्यवाद। मैं अब से इन सम्मेलनों का पालन करना शुरू कर दूंगा। – Anon

+1

@ आओन - आपका स्वागत है :) खुश मैं मदद कर सकता हूं –