テーブルには列が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
また、最後に(または他の文字列連結メソッドを)呼び出す必要がないため、余分な連結操作を再度節約することになります。