由于您知道表中只有一列,因此我建议循环并使用 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
(或其他一些字符串连接方法),您最终会再次节省额外的连接操作。