Вот пример того, как выполнить левое соединение и создать UserPageSetting
по умолчанию, если соединение не удалось. Это вернет 5 записей; 1 за каждый UserPage
. У одного из них будет успешное объединение, обозначенное Active = true
void Main()
{
var inner = new List<UserPage> {
new UserPage { Id = 1, Name = "One" },
new UserPage { Id = 2, Name = "Two" },
new UserPage { Id = 3, Name = "Three" },
new UserPage { Id = 4, Name = "Four" },
new UserPage { Id = 5, Name = "Five" }};
var outer = new List<UserPageSetting> {
new UserPageSetting { UserId = 1, PageId = 1, Active = true, Published = true }};
var joined = inner
.GroupJoin(outer, i => i.Id, o => o.PageId, (i, o) => o
.Select(x => new { Inner = i, Outer = x })
.DefaultIfEmpty(new { Inner = i, Outer = new UserPageSetting {UserId = i.Id, PageId = i.Id, Active = false, Published = false } }))
.SelectMany(x => x)
//.Where(x => x.Outer == -1) -- include if you only want to see the join misses
;
foreach (var x in joined)
{
Console.WriteLine($"UserPage({x.Inner.Id}, {x.Inner.Name}) joined to UserPageSetting({x.Outer.UserId}, {x.Outer.Active})");
}
}
Будет выведено следующее:
UserPage(1, One) joined to UserPageSetting(1, True)
UserPage(2, Two) joined to UserPageSetting(2, False)
UserPage(3, Three) joined to UserPageSetting(3, False)
UserPage(4, Four) joined to UserPageSetting(4, False)
UserPage(5, Five) joined to UserPageSetting(5, False)