我构建的方法可以将特定的数据表列值转换为特定类型的列表,最像是字符串列表。但是,当数据表列是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;
}
答案 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();
}
}