Я хотел бы использовать метод Enumerable.Aggregate(...), чтобы объединить список строк, разделенных точкой с запятой. Скорее легко, не так ли?
Учитывая следующее:
-
private const string LISTSEPARATOR = "; ";
- . OrderedTracks -
List<TrackDetails>
- В TrackDetails есть DiscNumber Int16? Свойство
Следующий оператор вызовет исключение, если последовательность, возвращаемая Distinct(), пуста (поскольку метод Aggregate() не применяется в пустой последовательности):
txtDiscNumber.Text = album.OrderedTracks
.Where(a => a.DiscNumber.HasValue)
.Select(a => a.DiscNumber.Value.ToString())
.Distinct()
.Aggregate((i, j) => i + LISTSEPARATOR + j);
Обходной путь, который я использую:
List<string> DiscNumbers =
album.OrderedTracks
.Where(a => a.DiscNumber.HasValue)
.Select(a => a.DiscNumber.Value.ToString())
.Distinct()
.ToList();
if (!DiscNumbers.Any())
txtDiscNumber.Text = null;
else
txtDiscNumber.Text =
DiscNumbers.Aggregate((i, j) => i + LISTSEPARATOR + j);
Есть ли лучшее решение? Возможно ли это сделать в одном заявлении LINQ?
Спасибо заранее.