используя LINQ, как я могу объединить строковые свойства из itesm в коллекцию

#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.