Linq - левое внешнее соединение с точечной нотацией
Как бы я сделал левое внешнее соединение в linq с использованием точечной нотации?
Здесь выражение запроса:
var query = from u in db.Users
join d in db.Defects on u.userID equals d.userID into defectsGroup
from d in defectsGroup.DefaultIfEmpty()
select new { u, d };
Вот что я пробовал:
var query2 = db.Users.GroupJoin(db.Defects.DefaultIfEmpty(),
u => u.userID,
d => d.userID,
(user, defect) => new { user, defect });
Но дефект отображается как IEnumerable<Defect>
, а не только Defect
. Я также пробовал:
var query2 = db.Users.GroupJoin(db.Defects,
u => u.userID,
d => d.userID,
(user, defect) => new { user, defect.DefaultIfEmpty() });
Что просто не компилируется. Кажется, что все онлайн-примеры используют синтаксис (более четкого) запроса.
Ответы
Ответ 1
Я думаю, вы этого хотите:
var query2 = db.Users.GroupJoin(db.Defects,
u => u.userId,
d => d.userID,
(u, defectsGroup) => new { u, defectsGroup})
.SelectMany(z => z.defectsGroup.DefaultIfEmpty(),
(z, d) => new { z.u, d });
Подробнее см. в блоге Edulinq в выражениях запросов.