【问题标题】:Transfer specific datatable contents to another array将特定的数据表内容传输到另一个数组
【发布时间】:2014-06-26 06:23:12
【问题描述】:

我正在尝试将我的数据表内容传输到另一个数组。我只会从数据表中获取特定字段,但我不知道如何将特定列的内容保存到另一个数组中。

我做了什么:

        dr = SuperViewBLL.GetSomeStuff();
        string[] new_array; 
        if (dr.Rows.Count > 0)
        {

            for (int i = 0; i < dr.Rows.Count;i++ )
            {
               new_array[i] = dr.Rows[i]['StuffLocationId'];
               // I do know this is wrong
            }
        }

如何将列 StuffLocationId 放入数组 new_array?

【问题讨论】:

    标签: c# asp.net arrays datatable


    【解决方案1】:

    该行几乎是正确的,除了您需要双引号而不是单引号,并且您还需要将值转换/转换为类型 String 以将其放入 String 数组中:

    new_array[i] = (string) dr.Rows[i]["StuffLocationId"];
    

    或者,如果数据可以为空:

    new_array[i] = dr.Rows[i]["StuffLocationId"] as string;
    

    问题是数组不存在,因为您还没有创建它。为了创建一个数组,你必须知道它的大小。如果您没有隐式或显式指定大小,那么您还没有创建数组。这个:

    string[] new_array;
    

    应该是这样的:

    string[] new_array = new string[dr.Rows.Count - 1];
    

    你也可以在这个问题上抛出一些 LINQ 并简化代码:

    var new_array = dr.AsEnumerable()
                      .Select(row => row["StuffLocationId"] as string)
                      .ToArray();
    

    这也是一个隐式指定数组大小的例子。

    【讨论】:

      【解决方案2】:

      这种方式更清晰:

          dt = SuperViewBLL.GetSomeStuff();
          List<string> list = new List<string>();
      
          foreach(DataRow row in dt.Rows)
          {
              list.Add((!row.IsNull("StuffLocationId") ? row["StuffLocationId"] as string : string.Empty));
          }  
      

      在@jmcilhinney 的帮助下更新

      【讨论】:

      • 虽然ToString 不一定是错的,但我想说,通常情况下,演员表会更合适。如果数据已经是Strings,则无需进行实际转换,如果不是,则可能不应该进入String 数组。此外,如果数据可以为空,那么使用ToString 会将DBNull.Value 转换为String.Empty 而不是null,这可能是可取的,但在大多数情况下可能不应该这样做。如果数据可以为空,那么在大多数情况下,条件转换可能是最合适的:dr.Rows[i]["StuffLocationId"] as string
      • 如果数据可以为空,那么您需要寻找DBNull.Value,而不是null。使用三元运算符没有意义。如果您想为数据库 NULL 使用空的 String,那么只需使用 row["StuffLocationId"].ToString(),它将为您处理。如果您想将 C# null 用于数据库空值,请使用 row["StuffLocationId"] as string。两者都很简洁。如果您确实想使用三元运算符,那么最正确的选项是 row.IsNull("StuffLocationId") ? string.Empty : (string) row["StuffLocationId"]row.Field&lt;string&gt;("StuffLocationId") 不强制转换。
      • 我已经对此row["StuffLocationId"].ToString() 进行了测试,但如果值为空,则会引发错误。它自己不处理。但我喜欢 row.IsNull("xx") 的想法。谢谢你。
      • 如果字段包含DBNull.Value,它会自行处理,如果从数据库中检索到 NULL 数据,它将自行处理。数据库空值由DBNull.Value 表示,它是DBNull 类的一个实例,即一个对象,而不是null,它在C# 中表示没有对象。之所以这样,是因为 .NET 最初不支持可空值类型,因此从包含整数等的列中检索到的 NULL 数据无法用null 表示。 DBNull 类的ToString 方法返回String.Empty
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-18
      • 1970-01-01
      • 2016-07-26
      • 1970-01-01
      • 2017-11-16
      • 2019-12-26
      相关资源
      最近更新 更多