列出DataTable值

时间:2012-07-27 19:04:16

标签: c# arrays list datatable

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

2 个答案:

答案 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(或其他一些字符串连接方法),最终会再次节省额外的连接操作