VB.Net LinQ-左外部联接多个表

问题描述 投票:0回答:1

我需要知道如何使用Linq在VB.Net中保留多个表的连接。

到目前为止我所拥有的:

Dim linqVorauswahl = (From e In ds.Tables("id_EAN")
                  Join gmpfr In ds.Tables("id_GetMatchingProductForIdResult") On e.Field(Of String)("id_EAN") Equals gmpfr.Field(Of String)("id_Id")
                  Join prods In ds.Tables("id_Products") On gmpfr.Field(Of Nullable(Of Int32))("id_GetMatchingProductForIdResult_Id") Equals prods.Field(Of Nullable(Of Int32))("id_GetMatchingProductForIdResult_Id")
                  Join prod In ds.Tables("id_Product") On prods.Field(Of Nullable(Of Int32))("id_Products_Id") Equals prod.Field(Of Nullable(Of Int32))("id_Products_Id")
                  Join ident In ds.Tables("id_Identifiers") On prod.Field(Of Nullable(Of Int32))("id_Product_Id") Equals ident.Field(Of Nullable(Of Int32))("id_Product_Id")
                  Join asinmp In ds.Tables("id_MarketplaceAsin") On ident.Field(Of Nullable(Of Int32))("id_Identifiers_Id") Equals asinmp.Field(Of Nullable(Of Int32))("id_Identifiers_Id")
                  Join attrSets In ds.Tables("id_AttributeSets") On ident.Field(Of Nullable(Of Int32))("id_Product_Id") Equals attrSets.Field(Of Nullable(Of Int32))("id_AttributeSets_Id")
                  Join itemAttr In ds.Tables("id_ItemAttributes") On attrSets.Field(Of Nullable(Of Int32))("id_AttributeSets_Id") Equals itemAttr.Field(Of Nullable(Of Int32))("id_AttributeSets_Id")
                  Join saleRankings In ds.Tables("id_SalesRankings") On prod.Field(Of Nullable(Of Int32))("id_Product_Id") Equals saleRankings.Field(Of Nullable(Of Int32))("id_Product_Id")
                  Join salesRank In ds.Tables("id_SalesRank") On saleRankings.Field(Of Nullable(Of Int32))("id_SalesRankings_Id") Equals salesRank.Field(Of Nullable(Of Int32))("id_SalesRankings_Id")
                  Where itemAttr.Field(Of String)("id_Binding") <> "Wine" And
                       itemAttr.Field(Of String)("id_Binding") <> "Lebensmittel & Getränke" And
                       itemAttr.Field(Of String)("id_Binding") <> "Product Bundle"
                  Select New With {
                  .asinMP = asinmp.Field(Of String)("id_MarketplaceId"),
                  .ean = e.Field(Of String)("id_EAN"),
                  .asin = asinmp.Field(Of String)("id_ASIN"),
                  .title = itemAttr.Field(Of String)("id_Title"),
                  .status = gmpfr.Field(Of String)("id_status"),
                  .binding = itemAttr.Field(Of String)("id_Binding"),
                  .rank = Convert.ToInt32(salesRank.Field(Of String)("id_Rank"))
                  }).ToArray

我需要保留最后两个联接,因为它们并不总是填充/可用。

Join saleRankings In ds.Tables("id_SalesRankings") On prod.Field(Of Nullable(Of Int32))("id_Product_Id") Equals saleRankings.Field(Of Nullable(Of Int32))("id_Product_Id")
Join salesRank In ds.Tables("id_SalesRank") On saleRankings.Field(Of Nullable(Of Int32))("id_SalesRankings_Id") Equals salesRank.Field(Of Nullable(Of Int32))("id_SalesRankings_Id")

您对解决此问题有任何简单的想法吗?如果可能的话,在一个查询中。

.net vb.net linq left-join
1个回答
© www.soinside.com 2019 - 2024. All rights reserved.