将数据表列转换为列表

时间:2018-10-30 11:41:32

标签: c# datatable

我构建的方法可以将特定的数据表列值转换为特定类型的列表,最像是字符串列表。但是,当数据表列是decimal或其他任何类型时,我遇到的问题是我想以List<string>的形式获取结果,例如,我得到了错误:十进制到字符串异常。我应该在方法内部进行哪些更改以解决该问题?

//for example here colname is decimal i want still my list to be List<string> containing that decimals as strings
    var myList = GetSpecificColumnValuesFromDatatableToList<string>(mydt, "colname");

    public List<T> GetSpecificColumnValuesFromDatatableToList<T>(DataTable datatable, string colName)
    {
         List<T> list = datatable.AsEnumerable().Select(r => r.Field<T>(colName)).ToList();          
         return list;
    }

1 个答案:

答案 0 :(得分:1)

您可以在方法中再添加一层泛型并提供转换器表达式,以便将整个值列表转换为所需的类型。

var myList = GetSpecificColumnValuesFromDatatableToList<decimal, string>(mydt, "colname", v => c.ToString("0.##"));

public List<TResult> GetSpecificColumnValuesFromDatatableToList<TColumn, TResult>(DataTable datatable, string colName, Func<TColumn, TResult> converter)
{
     return datatable.AsEnumerable().Select(r => converter(r.Field<TColumn>(colName))).ToList();          
}

为方便起见,建议将其作为扩展方法:

var myList = mydt.ConvertColumn<decimal, string>("colname", v => v.ToString("0.##"));

static class DataTableExtension 
{
    public static List<TResult> ConvertColumn<TColumn, TResult>(this DataTable datatable, string colName, Func<TColumn, TResult> converter)
    {
         return datatable.AsEnumerable().Select(r => converter(r.Field<TColumn>(colName))).ToList();          
    }
}