有人可以帮我完成这个linq左外连接查询,以便右表(tempData)的第二列包含在结果集中,即使它可能为null吗?
sortedData = From cs In mbCustomSort
Order By cs(0)
Group Join entry In tempData On cs(joinColumn) Equals entry(0) Into Group
From last In Group.DefaultIfEmpty _
Select New With {.groupField = cs(joinColumn)}
答案 0 :(得分:0)
抱歉,我是用C#写的,但是怎么样:
var sortedData = from cs in mbCustomSort orderby cs.JoinColumn
join entry in tempData on cs.JoinColumn equals entry.OtherJoinColumn into Group
from subentry in Group.DefaultIfEmpty()
select new { groupField = cs.JoinColumn };
答案 1 :(得分:0)
(编辑)的
From last In Group
将外连接转换为内连接。当您继续使用Group
变量时,不会发生这种情况:
sortedData = From cs In mbCustomSort
Order By cs(0)
Group Join entry In tempData On cs(joinColumn) Equals entry(0) Into Group
Select New With {.groupField = cs(joinColumn),
.col2 = Group(1).RightColumn }
通过“内存中查询”对象的属性更改RightColumn
。
答案 2 :(得分:0)
LINQPad的默认处理不允许item(fieldno)
,所以我在here重新利用的数据中使用了实际的字段名称,包括在Mbc
中添加一个没有对应{{1}的新行在OrderId
中。这对我有用:
Mbtd
通过“工作”,我的意思是我添加的行显示为 null From cs In Mbcs _
Order By cs.Catalogid _
Group Join entry In mbtds On cs.OrderId Equals entry.OrderId Into Group _
From last In Group.DefaultIfEmpty _
Select cs.OrderId, last.Ocardtype
(以及Ocardtype
已经Ocardtype
的另一行)