我正在使用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
,但我的问题是我的示例中的左右连接在哪里?。
答案 0 :(得分:3)
默认情况下,LinQ中的所有联接都是INNER
(左或右)。
由于LEFT OUTHER JOIN
行,您的第1和第3个查询为x.DefaultIfEmpty()
。第二 - INNER JOIN
。
第一个和第二个查询具有相同的结果maby becouse .Take(50)
,在您的50行中,INNER
和OUTHER
之间没有区别。
答案 1 :(得分:1)
我的查询中没有任何错误,看起来很好。
要查看inner join
和Left join
或right join
是否有任何更改,您必须根据该数据获得数据。
如果某些Persons
不是employees
,则会在您的第一个查询中看到,并且为了您必须检查整个数据,first 50
可能不会告诉您。同样也是相反的。