返すDataTableがあります
IDs
,1
,2
,3
,4
,5
,100
,101
これを単一の文字列値に変換したい、つまり:
,1,2,3,4,5,100,101
単一の文字列を取得するために以下を書き換えるにはどうすればよいですか
var _values = _tbl.AsEnumerable().Select(x => x);
var singleString = string.Join(",", _values.ToArray() );
次のような拡張メソッドを記述します
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);
String.Join(
",",
_tbl.AsEnumerable()
.Select(r => r.Field<int>("ID").ToString())
.ToArray())
これを試して:
var _values = _tbl.AsEnumerable().Select(x => x);
string valueString = _values.ToList().Aggregate((a, b) => a + b);
MoreLINQ extensionを使用できます
var singleString = _values.ToDelimitedString(",");
私は一般的なArray
タイプで同様の問題があり、次のように解決しました
_string GetMembersAsString(Array array)
{
return string.Join(",", array.OfType<object>());
}
_
OfType<object>()
の呼び出しは必須であることに注意してください。
これでカンニングすることができます:
_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());
_