左边加入linq怎么样

时间:2014-08-20 13:58:42

标签: linq left-join

我有这个linq查询:

Dim lnqPrüfendeartikel = From r1 In (From row In dtKonf
                                 Let ARTNR_HZ_ROHNR = row.Field(Of String)("ARTNR-HZ")
                                 Let EMPF_ARTNR = row.Field(Of String)("ARTNR")
                                 Where ARTNR_HZ_ROHNR <> ""
                                 Select ARTNR_HZ_ROHNR, EMPF_ARTNR
                                 Order By ARTNR_HZ_ROHNR).Distinct.Concat( _
                                 (From row In dtKonf
                                 Let ARTNR_HZ_ROHNR = row.Field(Of String)("ROHNR")
                                 Let EMPF_ARTNR = row.Field(Of String)("ARTNR")
                                 Where ARTNR_HZ_ROHNR <> ""
                                 Select ARTNR_HZ_ROHNR, EMPF_ARTNR
                                 Order By ARTNR_HZ_ROHNR).Distinct)
                                 Join r2 In
                                 (From row In dtErlöse
                                 Let ARTNR = row.Field(Of String)("ARTNR")
                                 Let BWA = row.Field(Of String)("BWA")
                                 Let MENGE = row.Field(Of Double)("MENGE")
                                 Let M_EINHEIT = row.Field(Of String)("ME")
                                 Let WERT = row.Field(Of Double)("WERT")
                                 Where BWA = "201"
                                 Select ARTNR, MENGE, M_EINHEIT, WERT) On r1.EMPF_ARTNR Equals r2.ARTNR
                                 Select r1.ARTNR_HZ_ROHNR, r1.EMPF_ARTNR, r2.MENGE, r2.M_EINHEIT, r2.WERT

它的工作正确。现在,我想从r1获得所有记录,而不仅仅是那些记录在r2中的记录。我也想要一个左联盟。

我搜索了网,我应该写完

On r1.EMPF_ARTNR Equals r2.ARTNR

类似的东西:

into JoinedQuery from r2 in JoinedQuery.DefaultIfEmpty() select new {r1.ARTNR_HZ_ROHNR, r1.EMPF_ARTNR, r2.MENGE, r2.M_EINHEIT, r2.WERT}

但是vs不承认。

这是什么问题?

1 个答案:

答案 0 :(得分:0)

您找到的解决方案是C#。对于VB.NET,您需要使用:

Group Join r2 In (...) 
On r1.EMPF_ARTNR Equals r2.ARTNR Into JoinedQuery
From r2 In JoinedQuery.DefaultIfEmpty()
...

https://stackoverflow.com/a/13499618/124386