web-dev-qa-db-ja.com

IEnumerable to string

返すDataTableがあります

IDs
,1
,2
,3
,4
,5
,100
,101

これを単一の文字列値に変換したい、つまり:

,1,2,3,4,5,100,101

単一の文字列を取得するために以下を書き換えるにはどうすればよいですか

var _values = _tbl.AsEnumerable().Select(x => x);
35
user160677
var singleString = string.Join(",", _values.ToArray() );
95
Winston Smith

次のような拡張メソッドを記述します

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();
    }
}

前の式の結果がIEnumerable <String>であると仮定して、呼び出します:

var _values = _tbl.AsEnumerable().Select(x => x).AppendAll(String.Empty);    
10
Alex Humphrey
 String.Join(
      ",",
      _tbl.AsEnumerable()
          .Select(r => r.Field<int>("ID").ToString())
          .ToArray())
5
abatishchev

これを試して:

var _values = _tbl.AsEnumerable().Select(x => x);
string valueString = _values.ToList().Aggregate((a, b) => a + b);
3

MoreLINQ extensionを使用できます

var singleString = _values.ToDelimitedString(",");
2
Ad23

私は一般的なArrayタイプで同様の問題があり、次のように解決しました

_string GetMembersAsString(Array array)
{
    return string.Join(",", array.OfType<object>());
}
_

OfType<object>()の呼び出しは必須であることに注意してください。

2
honzakuzel1989

これでカンニングすることができます:

_String output = "";
_tbl.AsEnumerable().Select(x => output += x).ToArray(); 
// output now contains concatenated string
_

注クエリを強制的に実行するには、ToArray()などが必要です。

別のオプションは

_String output = String.Concat(_tbl.AsEnumerable().Select(x=>x).ToArray());
_
0
cjk