निम्न तालिका को देखते हुए, उदाहरण के लिए:
+ ---- + --------- + ----------- + | आईडी | GroupID |अन्यडेटा | + ---- + --------- + ----------- + | 1 | 1 | w4ij6u | + ---- + --------- + ----------- + | 2 | 2 | ai6465 | + ---- + --------- + ----------- + | 3 | 2 | ows64rg | + ---- + --------- + ----------- + | 4 | 2 | wqoi46suj | + ---- + --------- + ----------- + | 5 | 3 | w9rthzv | + ---- + --------- + ----------- + | 6 | 3 | 03ehsat | + ---- + --------- + ----------- + | 7 | 4 | w469ia | + ---- + --------- + ----------- + | 8 | 5 | nhwh57rt | + ---- + --------- + ----------- + | 9 | 5 | mwitgjhx4 | + ---- + --------- + ----------- +
मैं कुशलतापूर्वक कैसे प्राप्त कर सकता हूं List<List<DataRow>>
इस समूह से निकाला गया जो "GroupID" कॉलम पर आधारित है?
मूल रूप से, मैं चाहता हूं कि परिणाम:
MyList(0) = List: 1 DataRow, ID(s) 1
MyList(1) = List: 3 DataRows, ID(s) 2,3,4
MyList(2) = List: 2 DataRows, ID(s) 5,6
MyList(3) = List: 1 DataRow, ID(s) 7
MyList(4) = List: 2 DataRows, ID(s) 8,9
हालांकि यहाँ समस्या है: इस डेटाटेबल में सैकड़ों कॉलम और दसियों हज़ारों पंक्तियाँ हैं, इसलिए यह ऑपरेशन यथासंभव कुशल होना चाहिए।
मैंने पहले से ही निम्नलिखित तरीकों की कोशिश की है:
- बनाना
DataView
पंक्ति फ़िल्टर के साथ, और उस दृश्य से पंक्तियों की एक तालिका / सूची निकालना। - GroupIDs की एक अनूठी सूची प्राप्त करने के बाद, लूप के भीतर एक Linq क्वेरी। Linq क्वेरी एक के आधार पर GroupIDs के प्रत्येक "सेट" का चयन करती है
Where
खंड।
मैं उम्मीद करता हूं कि किसी और के पास इस डेटा को निकालने का एक बेहतर, अधिक कुशल तरीका होगा।
उत्तर:
उत्तर № 1 के लिए 1क्या आपने DataTable.Select () विधि की कोशिश की है? यहाँ इसका उपयोग करने का एक उदाहरण है:
DataTable table = GetSomeData();
DataRow[] results = table.Select("SomeInt > 0");
List<DataRow> resultList = results.ToList();
DataTable.Select का उपयोग करना निश्चित रूप से DefaultView.Filter की तुलना में तेज होना चाहिए, और जैसा कि आप देख सकते हैं कि सूची में परिणाम डालने की क्षमता पहले से ही निर्मित है।
जवाब के लिए 0 № 2
पता चलता है कि ए) मेरा रिटर्निंग डेटा सेट भी थाबड़े (बग के कारण), और B) LINQ संभवतः ऐसा करने का सबसे तेज़ तरीका है, बिना कुछ बहुत लंबा या हैक -hh कोड लिखे। आपके विचारों के लिए धन्यवाद, सब लोग, लेकिन मैं अभी के लिए LINQ के साथ रहना होगा।