Ako príklad uvádzame nasledujúcu tabuľku:
+ ---- + --------- + ----------- + | ID GroupID |Ostatné údaje + ---- + --------- + ----------- + | 1 | 1 | w4ij6u | + ---- + --------- + ----------- + | 2 | 2 | ai6465 | + ---- + --------- + ----------- + | 3 | 2 | ows64rg | + ---- + --------- + ----------- + | 4 | 2 | wqoi46suj | + ---- + --------- + ----------- + | 5 3 | w9rthzv | + ---- + --------- + ----------- + | 6 | 3 | 03hsat | + ---- + --------- + ----------- + | 7 | 4 | w469ia | + ---- + --------- + ----------- + | 8 5 nhwh57rt | + ---- + --------- + ----------- + | 9 | 5 mwitgjhx4 | + ---- + --------- + ----------- +
Ako môžem efektívne získať List<List<DataRow>>
extrahované z tejto tabuľky, ktorá je založená na stĺpci „GroupID“?
V podstate chcem, aby výsledok bol:
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
Tu je problém: Táto tabuľka údajov obsahuje stovky stĺpcov a desiatky tisíc riadkov, takže táto operácia musí byť čo najefektívnejšia.
Už som vyskúšal nasledujúce metódy:
- Vytvorenie
DataView
s filtrom riadkov a extrahovaním tabuľky / zoznamu riadkov z tohto zobrazenia. - Linq dotaz v rámci slučky po získaní jedinečného zoznamu GroupID. Linq dotaz vyberie každú „množinu“ GroupID na základe a
Where
klauzula.
Dúfam, že niekto iný má lepší a efektívnejší spôsob získavania týchto údajov.
odpovede:
1 pre odpoveď č. 1Vyskúšali ste metódu DataTable.Select ()? Tu je príklad, ako ho používať:
DataTable table = GetSomeData();
DataRow[] results = table.Select("SomeInt > 0");
List<DataRow> resultList = results.ToList();
Použitie DataTable.Select by malo byť určite rýchlejšie ako DefaultView.Filter a ako vidíte, schopnosť vkladať výsledky do zoznamu je už zabudovaná.
0 pre odpoveď č. 2
Ukazuje sa, že A) Aj moja sada vracajúcich sa údajov bola príliš vysokáveľký (kvôli chybe) a B) LINQ je pravdepodobne najrýchlejší spôsob, ako to urobiť, bez toho, aby ste museli písať nejaký veľmi dlhý alebo hack-ish kód. Ďakujem za vaše nápady, všetci, ale zatiaľ sa držím LINQu.