#c# #linq
#c# #linq
Вопрос:
у меня есть список объектов в коллекции. Каждый объект имеет строковое свойство, называемое Issue . Я хочу объединить проблему из всех элементов коллекции и поместить их в одну строку. каков самый чистый способ сделать это с помощью LINQ?
вот ручной способ:
string issueList = "";
foreach (var item in collection)
{
if (!String.IsNullOrEmpty(item.Issue)
{
issueList = issueList item.Issue ", ";
}
}
//Remove the last comma
issueList = issueList.Remove(issueList.Length - 2);
return issueList;
Комментарии:
1. Я не вижу в этом ничего плохого.
2. @Nick — я просто подумал, что было бы чище в одном операторе LINQ
3. @Nick: Ты этого не делаешь? Почему бы и нет? Это большое количество раздражающего повторяющегося кода.
4. @Slaks, я не знал о том, чтобы делать это так, как вы указали в своем ответе. Это выглядит намного лучше.
5. @Nick: Это может быть и не «беспорядочно», но это медленно (ему приходится копировать накопленную строку один раз на входную строку) и с ошибками (он выдает исключение, если выходная строка пуста).
Ответ №1:
Вы можете написать
return String.Join(", ", collection.Select(o => o.Issue));
В .Net 3.5 вам нужно будет добавить .ToArray()
.
Ответ №2:
Вы могли бы использовать ToDelimitedString из morelinq.