2012-10-31 115 views
0

有人能帮我完成这个linq左外连接查询,以便右表(tempData)的第二列包含在结果集中,即使它可能为空?Linq左外连接中的多列

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

什么是mbCustomSort,customsort和tempData? –

+0

对不起,mbcustomsort和tempData是数据表。你应该阅读cs – groobie

+0

这是否工作:'用{.groupField = cs(joinColumn),.SecondRight = last(1)}'选择新的? –

回答

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 }; 
+0

谢谢,但不是还只是返回一列吗? – groobie

+0

您想要返回什么? – Colin

+0

'select new {groupField = cs.JoinColumn,subentry}' – Colin

0

(编者)

From last In 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:当你继续Group变量不会出现这种情况。

+0

这几乎做,但在结果集的第二列的内容存放名为“内存查询”包含右表中的两列的对象 - 但感谢越来越接近解决。有没有其他人有任何想法? – groobie

+0

好的,所以它可能类似'From row In Group Select row(1).RightColumn'? –

+0

类似的东西,但该语法不起作用:-) – groobie

0

LINQPad的默认处理不允许item(fieldno),所以我从here改变用途的数据使用的实际字段名,其中包括在MbcMbtd没有相应OrderId添加一个新行。这个工作对我来说:

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已经null)。