我有一个DataTable(id
),它有一列(LinkID
)。此列的行中的项目是数字。我试图按以下格式列出这些数字:
1, 2, 30, 494, etc...
我如何获得所有数字并以这种方式列出?
以下是我的尝试:
foreach (DataRow row in id.Rows)
{
foreach (DataColumn column in id.Columns)
{
var test = row[0].ToString();
List<string> ls = new List<string>();
ls.Add(test);
MessageBox.Show(ls.ToString());
}
}
答案 0 :(得分:4)
您可以执行以下操作:
List<string> test = new List<string>();
foreach (DataRow row in id.Rows)
{
test.Add(row[0].ToString());
}
MessageBox.Show(String.Join(",", test.ToArray()));
答案 1 :(得分:2)
由于您知道表中只有一个列,因此我建议循环并使用StringBuilder
来构建字符串,如下所示:
var builder = new StringBuilder();
// Cycle through the rows, append the field.
var query =
from row in id.AsEnumerable()
select builder.Append(row.Field<int>(0)).Append(", ");
// Get the last or default, if there are no rows, builder will be null.
builder = query.LastOrDefault();
// If the builder is null, there are no rows, return
// null.
if (builder == null) return null;
// The builder is not null, there is content
// in the StringBuilder.
// This removes the last ", " which is appended at the end if
// there are any elements.
if (builder != null) builder.Length -= 2;
// Return the string from the builder.
return builder.ToString();
由于StringBuilder.Append
method使用了fluent interface,因此您可以让LINQ查询返回相同的实例,并在继续添加以逗号分隔的值时获取最后一个实例。
您使用LastOrDefault
method,这样如果没有行,您会得到一个null
值,表示您没有行。
你在这里得到两个好处;对于大量行,您不需要构建一个必须在以后连接的字符串列表。相反,您需要使用StringBuilder
(预先分配容量)来构建字符串并根据需要增加容量 。
此外,无需在最后调用Array.Join
(或其他一些字符串连接方法),最终会再次节省额外的连接操作 。