Linq - 带点符号的左外连接

Ada*_*kis 17 c# linq linq-to-entities

如何使用点表示法在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 };
Run Code Online (Sandbox Code Playgroud)

这是我试过的:

var query2 = db.Users.GroupJoin(db.Defects.DefaultIfEmpty(), 
                u => u.userID, 
                d => d.userID, 
                (user, defect) => new { user, defect });
Run Code Online (Sandbox Code Playgroud)

但缺陷显示的IEnumerable<Defect>不仅仅是公正Defect.我也尝试过:

var query2 = db.Users.GroupJoin(db.Defects, 
                u => u.userID, 
                d => d.userID, 
                (user, defect) => new { user, defect.DefaultIfEmpty() });
Run Code Online (Sandbox Code Playgroud)

这根本就不编译.所有在线示例似乎都使用(更清晰的)查询语法.

Jon*_*eet 25

我想你想要这个:

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 });
Run Code Online (Sandbox Code Playgroud)

有关详细信息,请参阅有关查询表达式的Edulinq博客文章.

  • 哇 - 我猜这就是为什么所有的样本都使用查询语法:) (2认同)