我知道有很多类似的线程,但我的要求没什么不同。基本要求是将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();
}
}
}
如果我没有明确提供列名,那么它会将所有行值完美地返回为strings数组。
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
值?
答案 0 :(得分:3)
您可以对columns参数执行选择。我在这里将对象[]的类型更改为字符串[]。
public static class ExtensionMethods
{
public static object ToStringArray(this DataTable dt, params string[] 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 => columns.Select(c => x[c]).ToArray()).ToArray();
}
else
{
return dt.AsEnumerable().Select(x => new[] { x.ItemArray }).ToArray();
}
}
}