/ / Účinne extrahovať podmnožinu riadkov z veľkej tabuľky dát? - .net, datatable, performance

Efektívne extrahovať podmnožinu riadkov z veľkého DataTable? - .net, datatable, výkon

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ď č. 1

Vyskúš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.