using System.Collections.Generic;
private static Dictionary<string, string> specialPlurals = new Dictionary<string, string> {
public static string Pluralize(string singular) {
if (string.IsNullOrWhiteSpace(singular)) { return singular;}
if (specialPlurals.TryGetValue(singular, out var plural)) { return plural;}
public static void Main() {
List<Party> parties = new List<Party>();
parties.Add(new Party {Type = "Plaintiff", Name = "Eilean Dover"});
parties.Add(new Party {Type = "Plaintiff", Name = "Bea O'Problem"});
parties.Add(new Party {Type = "Defendant", Name = "Anna Graham"});
parties.Add(new Party {Type = "Witness", Name = "John Doe"});
parties.Add(new Party {Type = "Witness", Name = "Rosa Shore"});
var grouping = parties.GroupBy(
(type, group) => $"{Pluralize(type)}: {String.Join(", ", group.Select(party => party.Name))}"
var result = string.Join("; ", grouping);
Console.WriteLine(result);
public string Type { get; set; }
public string Name { get; set; }