IEnumerable到字符串

use*_*677 38 c# linq asp.net datatable ado.net

我有一个返回的DataTable

IDs
,1
,2
,3
,4
,5
,100
,101
Run Code Online (Sandbox Code Playgroud)

我想将其转换为单个字符串值,即:

,1,2,3,4,5,100,101
Run Code Online (Sandbox Code Playgroud)

如何重写以下内容以获取单个字符串

var _values = _tbl.AsEnumerable().Select(x => x);
Run Code Online (Sandbox Code Playgroud)

Win*_*ith 101

var singleString = string.Join(",", _values.ToArray() );
Run Code Online (Sandbox Code Playgroud)

  • 在.Net 4`Join`和`Concat`上取'IEnumerable`,你不需要`ToArray`.所以,这取决于. (19认同)
  • 最简单的解决方案,我即将回答,但你需要在_values上添加.ToArray(). (3认同)
  • @ck我想这是一个解释问题.我读的逗号是OP的格式所特有的,而不是数据的一部分.在任何情况下,`string.Join`可能是实现所需结果的最简单方法. (3认同)

Ale*_*rey 10

写一个扩展方法,如

public static String AppendAll(this IEnumerable<String> collection, String seperator)
{
    using (var enumerator = collection.GetEnumerator())
    {
        if (!enumerator.MoveNext())
        {
            return String.Empty;
        }

        var builder = new StringBuilder().Append(enumerator.Current);

        while (enumerator.MoveNext())
        {
            builder.Append(seperator).Append(enumerator.Current);
        }

        return builder.ToString();
    }
}
Run Code Online (Sandbox Code Playgroud)

并假设前一个表达式的结果是IEnumerable <String>,请调用:

var _values = _tbl.AsEnumerable().Select(x => x).AppendAll(String.Empty);    
Run Code Online (Sandbox Code Playgroud)

  • @Winston:我知道String.Join.如果数据源是一个数组,我当然会使用它.String.Join需要一个数组,该数组必须完全保存在内存中.然后将数组复制到String中,再次在内存中.因此,String.Join的内存需求比我编写的要多,它逐个遍历序列中的项目并将它们附加到字符串中.String.Join是另一种涉及内存需求/复杂性权衡的方法. (3认同)
  • 亚历克斯 - 你的那个有点过时了:http://msdn.microsoft.com/en-us/library/dd992421.aspx.此外,现在考虑表演还为时过早,当然没有剖析.如果有问题的数据非常小或已经在数组中,该怎么办? (2认同)

aba*_*hev 5

 String.Join(
      ",",
      _tbl.AsEnumerable()
          .Select(r => r.Field<int>("ID").ToString())
          .ToArray())
Run Code Online (Sandbox Code Playgroud)