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 в выражениях запросов.