C# Linq-带点符号的左外连接
如何使用点表示法在linq中进行左外连接 以下是查询表达式:C# Linq-带点符号的左外连接,c#,linq,linq-to-entities,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 }; 以下是我尝试过的: var query2 =
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
。我还尝试:
var query2 = db.Users.GroupJoin(db.Defects,
u => u.userID,
d => d.userID,
(user, defect) => new { user, defect.DefaultIfEmpty() });
根本无法编译。所有在线示例似乎都使用(更清晰的)查询语法 我想你想要这个:
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 });
有关更多详细信息,请参见my。Wow-我想这就是为什么所有示例都使用查询语法:)@Adam:是的,联接在查询语法上更简单:)我在Microsoft的DefaultIfEmpty上找到的所有文档都说(示例显示),当给定的枚举为空时,它会返回一个默认项的枚举。左侧外部联接示例都显示,当枚举中的特定项为null时,它返回一个默认项。我知道这是可行的,但是这个特殊(显然不同)方法的文档在哪里?谢谢@凯莉:我不知道你的意思。关键是,当“left”元素没有匹配项时,GroupJoin将以“右侧”的空组结束。SelectMany然后将每个“左”项与“右”项配对,但如果组为空,则使用null的“右”项。