【问题标题】:Convert DataTable to String Array through Extension Method通过扩展方法将DataTable转换为字符串数组
【发布时间】: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 值来实现此功能?

【问题讨论】:

    标签: c# arrays linq datatable


    【解决方案1】:

    您可以对 columns 参数进行选择。我在这里将类型从 object[] 更改为 string[]。

    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();
            }
        }
    }
    

    【讨论】:

    • 我可能会将ToArray 添加到columns.Select 部分:columns.Select(c =&gt; x[c]).ToArray()。否则,一个很好的答案
    • 你做到了。非常感谢你的朋友。 @Pikoh 也非常感谢你,你的建议使这个答案符合我的要求。
    猜你喜欢
    • 1970-01-01
    • 2017-12-07
    • 2018-12-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-16
    • 2018-06-05
    • 2015-06-16
    • 1970-01-01
    相关资源
    最近更新 更多