1

我有一个 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());
    }
}
4

2 回答 2

4

您可以执行以下操作:

List<string> test = new List<string>();

foreach (DataRow row in id.Rows)
{
   test.Add(row[0].ToString());
}

MessageBox.Show(String.Join(",", test.ToArray()));
于 2012-07-27T19:11:05.227 回答
2

由于您知道表中只有列,因此我建议循环并使用 aStringBuilder来构建您的字符串,如下所示:

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方法使用fluent interface,因此您可以让 LINQ 查询返回相同的实例,并在继续附加逗号分隔值的同时获取最后一个实例。

您使用该LastOrDefault方法,以便在没有行的情况下获得一个null值,指示您没有行。

您在这里获得两个好处;对于大量行,您无需构建稍后必须连接的字符串列表。相反,您正在构建字符串并根据需要使用StringBuilder(预先分配容量)增加容量。

此外,最后不必调用Array.Join(或其他一些字符串连接方法),您最终会再次节省额外的连接操作。

于 2012-07-27T19:16:15.947 回答