Linq - левое внешнее соединение с точечной нотацией - PullRequest
17 голосов
/ 30 марта 2011

Как мне сделать левое внешнее объединение в 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 Ответ

25 голосов
/ 30 марта 2011

Я думаю, что вы хотите это:

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 по выражениям запросов для получения более подробной информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...