【发布时间】:2017-05-25 08:13:11
【问题描述】:
我知道那里有很多类似的线程,但我的要求几乎没有什么不同。基本要求是将DataTable 转换为字符串数组。我可以通过创建一个 Extension 方法来为我完成这项工作。
public static class ExtensionMethods
{
public static object ToStringArray(this DataTable dt, params object[] columns)
{
//if specifically columns are provided then returns item array values for these columns.
if (columns != null && columns.Length > 0)
{
//return dt.AsEnumerable().Select(x => new[] { //here i want to iterate through columns params }).ToArray();
}
else
{
return dt.AsEnumerable().Select(x => new[] { x.ItemArray }).ToArray();
}
}
}
如果我没有明确提供列名,那么它会完美地将所有行值作为字符串数组返回。
var dtData = dataTable.ToStringArray();
但是如果我提供列名会怎样
var dtData = dataTable.ToStringArray("Column1", "Column2", "Column3");
那么我如何遍历columns 以仅获取这段代码中提供的列值
if (columns != null && columns.Length > 0)
{
return dt.AsEnumerable().Select(x => new[] { //here i want to iterate through columns params }).ToArray();
}
我知道我可以通过硬编码列名来做到这一点,如下所示:
var dtData = dt.AsEnumerable().Select(x => new[] { x["Column1"], x["Column2"], x["Column3"] }).ToArray();
或
var dtData = dt.AsEnumerable().Select(x => new[] { x.Field<string>("Column1"), x.Field<int>("Column2").ToString(), x.Field<string>("Column3") }).ToArray();
如何在我的扩展方法中使用param object[] columns 值来实现此功能?
【问题讨论】: