Как я могу написать выражение 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"
Ответ 1
Почему бы просто не пойти (String.Join Method)
string joined = String.Join(",", data.ToArray());
Но если это LINQ, вы можете попробовать
string joinedLinq = data.Aggregate((i, j) => i + "," + j);
Ответ 2
У вас может возникнуть соблазн использовать Aggregate(), если вы придерживаетесь LINQ
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())
Ответ 3
Как писал Anthony Pegram String.Join<T>(delimiter, IEnumerable<T>)
, это лучшее решение в .NET 4!
Ответ 4
Вы можете использовать агрегат, когда вам нужно присоединиться к списку в один агрегированный объект.
string s = "";
if(data.Count > 0)
s = data.Aggregate((a, b) => a + ',' + b);