Подтвердить что ты не робот

Как получить список значений столбца из DataTable?

У меня есть DataTable.

DataTable dt = new DataTable();

dt.Columns.Add(new DataColumn("id", Type.GetType("System.Int32")));
dt.Columns.Add(new DataColumn("name", Type.GetType("System.String")));
// more columns here

Мне нужен список значений "id".

Могу ли я сделать это без цикла по всем строкам в моем DataTable и без Linq?

Edit:

После небольшой дискуссии с Сергеем я все равно решил использовать цикл.

4b9b3361

Ответ 1

Вы можете использовать Linq для DataTable:

var ids = dt.AsEnumerable().Select(r => r.Field<int>("id")).ToList();

UPDATE: без Linq

List<int> ids = new List<int>(dt.Rows.Count);
foreach(DataRow row in dt.Rows)
    ids.Add((int)row["id"]);

Заметьте, что для эффективности лучше использовать row[index] вместо row[columnName]. Сначала он получает столбец по индексу из массива столбцов. Latter получает индекс столбца из внутреннего словаря, который сопоставляет имена индексам и только затем получает столбец по индексу.

Еще одна вещь, которую нужно отметить, - инициализировать емкость списка с количеством строк. Если вы этого не сделаете, то внутренний массив списка будет повторно создан и скопирован многократно (зависит от количества строк).

И последнее, что можно сказать - наиболее эффективный способ с огромной таблицей (если это возможно) - фильтровать данные на стороне сервера.