Как я могу преобразовать DataColumn в список значений с тем же типом данных, что и столбец?
Пример:
static List<T> ColumnValuesToList<T>(DataTable dt,out string typeName)
{
typeName = dt.Columns[0].DataType.ToString();
List<T> list = new List<T>();
foreach (DataRow row in dt.Rows)
{
// var value = row[0];
//list.Add(value);
list.Add(row[0]);
}
return list;
}
Вызов:
List<int> myList = ColumnValuesToList(myDtWithInts,typeInfo);
List<string> myList = ColumnValuesToList(myDtWithStrings,typeInfo);
Вы почти там, вам просто нужно получить значение из DataRow в нужном типе. То есть, вы можете бросить:
list.Add((T)row[0]);
или (что я бы предпочел), используйте метод расширения Field<T>
, который имеет преимущество в правильной работе с типами NULL (DBNull.Value
автоматически преобразуется в null
):
list.Add(row.Field<T>(0));
Однако, используя LINQ, вам действительно не нужно реализовывать это самостоятельно:
List<int> myList = myDtWithInts.AsEnumerable()
.Select(drow => drow.Field<int>(0)).ToList();