LINQ左右连接

时间:2017-02-02 05:48:53

标签: c# linq

我正在使用LINQ Pad Right, Left and Inner Joins练习LINQ我注意到了

(from a in Employees join b in Persons
     on a.PersonId equals b.PersonId into x
     from c in x.DefaultIfEmpty()
select  new {
        a.EmployeeId,
        c.PersonId,
        c.CompleteName
}).Take(50).OrderByDescending(m => m.EmployeeId)

(from a in Persons join b in  Employees
    on a.PersonId equals b.PersonId
select new {
    b.EmployeeId,
    b.PersonId,
    a.CompleteName
 }).Take(50).OrderByDescending(m => m.EmployeeId)

有相同的结果。

(from a in Persons join b in  Employees
    on a.PersonId equals b.PersonId into x
    from c in x.DefaultIfEmpty()
select 
     new {
        c.EmployeeId,
        c.PersonId,
        a.CompleteName
}).Take(50).OrderByDescending(m => m.EmployeeId)

我在linq中搜索right and left joins,但我的问题是我的示例中的左右连接在哪里?。

2 个答案:

答案 0 :(得分:3)

默认情况下,LinQ中的所有联接都是INNER(左或右)。

由于LEFT OUTHER JOIN行,您的第1和第3个查询为x.DefaultIfEmpty()。第二 - INNER JOIN

第一个和第二个查询具有相同的结果maby becouse .Take(50),在您的50行中,INNEROUTHER之间没有区别。

答案 1 :(得分:1)

我的查询中没有任何错误,看起来很好。 要查看inner joinLeft joinright join是否有任何更改,您必须根据该数据获得数据。

如果某些Persons不是employees,则会在您的第一个查询中看到,并且为了您必须检查整个数据,first 50可能不会告诉您。同样也是相反的。