Эффективно извлечь подмножество строк из большой таблицы данных? - PullRequest
0 голосов
/ 18 августа 2011

В качестве примера для следующей таблицы:

+----+---------+-----------+
| ID | GroupID | OtherData |
+----+---------+-----------+
| 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

Вот проблема, хотя: Этот DataTable содержит сотни столбцов и десятки тысяч строк, поэтому эта операция должна быть максимально эффективной.

Я уже пробовал следующие методы:

  • Создание DataView с фильтром строк и извлечение таблицы / списка строк из этого представления.
  • Запрос Linq в цикле после получения уникального списка GroupID.Запрос Linq выбирает каждый «набор» GroupID на основе предложения Where.

Я надеюсь, что у кого-то еще есть более эффективный и эффективный способ извлечения этих данных.

Ответы [ 2 ]

1 голос
/ 19 августа 2011

Вы пробовали метод DataTable.Select ()? Вот пример того, как его использовать:

DataTable table = GetSomeData();
DataRow[] results = table.Select("SomeInt > 0");

List<DataRow> resultList = results.ToList();

Использование DataTable.Select должно определенно быть быстрее, чем DefaultView.Filter, и, как вы можете видеть, возможность поместить результаты в список уже встроена.

0 голосов
/ 23 августа 2011

Оказывается, что A) Мой набор возвращаемых данных был слишком большим (из-за ошибки), и B) LINQ, вероятно, самый быстрый способ сделать это, без написания какого-либо очень длинного или хакерского кода.Всем спасибо за ваши идеи, но сейчас я буду придерживаться LINQ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...