Левое соединение в LINQ
Синтаксис join … into g с
DefaultIfEmpty оставляет каждого пользователя
слева. Без пары справа подставляется
null - в выводе "none".
Ожидается "Ann:pen; Bob:none":
var users = new[] { new { Id = 1, Name = "Ann" }, new { Id = 2, Name = "Bob" } };
var orders = new[] { new { UserId = 1, Item = "pen" } };
var q = from u in users
join o in orders on u.Id equals o.UserId into g
from o in g.DefaultIfEmpty()
select $"{u.Name}:{o?.Item ?? "none"}";
Console.WriteLine(string.Join("; ", q));
Без DefaultIfEmpty пользователь "Bob"
из примера выше исчез бы. Осталась бы только
строка "Ann:pen".
Возьмите три склада и одну поставку. Оставьте в результате каждый склад и выведите три строки.