Linq中的多列左外连接

时间:2012-10-31 16:16:49

标签: vb.net linq outer-join

有人可以帮我完成这个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)}

3 个答案:

答案 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的另一行)