1

id1つの列()を持つDataTable( )があります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

テーブルには列が1つしかないことがわかっているので、次のようにループ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メソッド流暢なインターフェイスを使用するため、LINQクエリで同じインスタンスを返し、カンマ区切りの値を追加し続けながら最後のインスタンスを取得することができます。

LastOrDefaultこのメソッドを使用して、行がない場合に、行がないnullことを示す値を取得します。

ここには2つの利点があります。多数の行の場合、後で連結する必要のある文字列のリストを作成する必要はありません。代わりに、文字列を作成し、必要に応じてStringBuilder容量を事前に割り当てる)容量を増やします。

Array.Joinまた、最後に(または他の文字列連結メソッドを)呼び出す必要がないため、余分な連結操作を再度節約することになります。

于 2012-07-27T19:16:15.947 に答える