GroupJoin в LINQ
Метод GroupJoin для каждого левого ключа
возвращает группу правых совпадений, не разворачивая
её в плоский список как обычный join.
У "Ann" два заказа:
var users = new[] { new { Id = 1, Name = "Ann" } };
var orders = new[] { new { UserId = 1, Item = "pen" }, new { UserId = 1, Item = "ink" } };
var q = users.GroupJoin(orders, u => u.Id, o => o.UserId, (u, g) => $"{u.Name}:{g.Count()}");
Console.WriteLine(q.First());
У "Ann" один заказ, у "Bob" ни одного. Пустая группа даёт 0, но пользователь слева не пропадает:
var users = new[] { new { Id = 1, Name = "Ann" }, new { Id = 2, Name = "Bob" } };
var orders = new[] { new { UserId = 1, Item = "pen" } };
var q = users.GroupJoin(orders, u => u.Id, o => o.UserId, (u, g) => g.Count());
Console.WriteLine(string.Join(",", q));
Для каждого отдела выведите его название и число сотрудников.