リストから項目を選択してそれらを結合するLinq式(またはその他)を作成するにはどうすればよいですか?
例
IList<string> data = new List<string>();
data.Add("MyData1");
data.Add("MyData2");
string result = //some linq query... I try data.Select(x => x + ",");
//result = "MyData1, MyData2"
なぜ( String.Joinメソッド )
string joined = String.Join(",", data.ToArray());
しかし、それがLINQでなければならない場合は、
string joinedLinq = data.Aggregate((i, j) => i + "," + j);
LINQにこだわっている場合、Aggregate()を使用したくなるかもしれません
IList<int> data = new List<int>();
data.Add(123);
data.Add(456);
var result = data.Select(x => x.ToString()).Aggregate((a,b) => a + "," + b);
私はこれはお勧めしません私が難しい方法を見つけたので、リストにアイテムが含まれていない場合、またはアイテムが1つしかない場合は失敗するためです。私は忘れましたが、すべて同じように失敗します:-)
String.Join(...) is the best way
データタイプが文字列ではない上記の例では、これを行うことができます:
string.Join(",", data.Select(x => x.ToString()).ToArray())
Anthony Pegramが書いたように、String.Join<T>(delimiter, IEnumerable<T>)
は.NET 4で最高のソリューションです!
リストを単一の集約オブジェクトに結合する必要がある場合は、集約を使用できます。
string s = "";
if(data.Count > 0)
s = data.Aggregate((a, b) => a + ',' + b);