【问题标题】:Retrieving dataset values from a particular column into a string将特定列中的数据集值检索到字符串中
【发布时间】:2012-10-09 18:59:19
【问题描述】:

在我的应用程序中,我想获取数据集中特定列中的数据并将其转换为逗号分隔的字符串。我使用了下面的代码。但我认为它使应用程序非常缓慢。

string ids = "";
if (datatable1.Rows.Count > 0)         
{
       foreach (DataRow dr in datatable1.Rows)
       {
           ids += dr["id"].ToString() + " ,";
       }

}

谁能提供一些改进代码的建议。

【问题讨论】:

  • 为什么您认为它会使您的应用程序变慢?另外,请注意您可以删除if (datatable1.Rows.Count > 0) 检查,因为它不是必需的(如果没有行,您的 foreach 循环将不会进入!)
  • 有多少行? StringBuilder 可能会更好?
  • @DaveHogan:可能成千上万
  • 一个ID通常是数字,为什么你使用字符串而不是List<int>
  • 是的,但我想在 sql 中使用它,例如 delete * from table where id in (@ids)。

标签: c# ado.net dataset


【解决方案1】:

如果您要进行太多连接,请使用StringBuilder

StringBuilder ids = new StringBuilder();
if (datatable1.Rows.Count > 0)         
{
       foreach (DataRow dr in datatable1.Rows)
       {
           ids.Append(dr["id"].ToString() + ",");
       }

}

或者你可以使用string.Join缩短它

string ids = string.Join(",",datatable1.AsEnumerable()
                                       .Select(r=> r.Field<int>("ID")));

【讨论】:

  • 哪个更快:使用 foreach 还是 string.join?
  • @Vijay,给他们两个时间,使用StopWatch
  • @Vijay:两者都使用循环,你应该问(你自己)什么更具可读性或可维护性。
  • @Vijay,感谢您指出这一点。现在好像修好了
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-26
  • 2019-07-14
  • 1970-01-01
相关资源
最近更新 更多