Вам нужно несколько звонков на string.Join
. Обратите внимание:
- вы хотите объединить отдельные имена для каждой группы в одну строку для каждой группы,
- , а затем вы хотите объединить строки, сгенерированные из каждой группы, в одну строку.
Метод GroupBy
имеет перегрузку, которая позволяет вам указать не только то, по чему вы группируете:
party => party.Type
, но и промежуточный результат для каждой группы; в этом случае одна строка:
(type, group) => $"{type} {String.Join(", ", group.Select(party => party.Name))}"
type
- это то, на что группируется каждая группа (в данном случае значение в свойстве Type
) group
- это сгруппированные экземпляры Party
, свойство Name
которого мы можем проецировать на последовательность строк (group.Select(party => party.Name
), которую затем мы можем объединить в одну строку, используя String.Join
.
Всего:
var grouping = parties.GroupBy(
party => party.Type,
(type, group) => $"{type} {String.Join(", ", group.Select(party => party.Name))}"
);
grouping
теперь может предоставить нам последовательность строк, которую мы можем использовать снова с String.Join
, чтобы создать одну строку:
var result = string.Join(",", grouping);
Что касается множественного числа типов, я думаю, вы можете добавить s
, но поместить исключения из этого правила в Dictionary<string, string>
:
private static Dictionary<string, string> specialPlurals = new Dictionary<string, string> {
{"Witness", "Witnesses"}
};
Затем напишите функцию, которая бы дать вам соответствующее множественное число:
public static string Pluralize(string singular) {
if (string.IsNullOrWhiteSpace(singular)) { return singular;}
if (specialPlurals.TryGetValue(singular, out var plural)) { return plural;}
return $"{singular}s";
}
и использовать его следующим образом:
var grouping = parties.GroupBy(
party => party.Type,
(type, group) => $"{Pluralize(type)}: {String.Join(", ", group.Select(party => party.Name))}"
);
var result = string.Join("; ", grouping);
Это приводит к следующему:
Plaintiffs: Eilean Dover, Bea O'Problem; Defendants: Anna Graham; Witnesses: John Doe, Rosa Shore
. NET Скрипка