首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用组连接连接LINQ中的多个数据

使用组连接连接LINQ中的多个数据
EN

Stack Overflow用户
提问于 2015-11-30 13:46:22
回答 2查看 870关注 0票数 1

我有五个数据集在一个数据集中。现在我要把他们都加入到一起。关键是,来自table1的一些条目在其他表中没有条目。所以我需要左连接或左外连接。在SQL中,它的工作方式如下:

代码语言:javascript
运行
复制
SELECT *
FROM TABLE1 LDC 
LEFT JOIN TABLE2 LGDE ON LDC.KEY1 = LGDE.KEY2
LEFT JOIN TABLE3 DEFI ON  LGDE.KEY3 = DEFI.KEY 4
LEFT JOIN TABLE4 SETT ON DEFI.KEY5 = SETT.KEY6
LEFT JOIN TABLE5 LST ON SETT.KEY7 = LST.KEY8

现在,我用LINQ在我的VB.NET代码中重新构建了这个语句。在我发现的其他一些帖子中,我必须使用DefaultIfEmpty()。但我没办法让它起作用。这是我的密码。(我们使用的是.NET框架3.5)

代码语言:javascript
运行
复制
Dim result = From ldc In TABLE1
               Group Join lgde1 In TABLE2 On ldc.Field(Of String)("KEY1") Equals lgde1.Field(Of String)("KEY2") Into g = Group
             From lgde In g.DefaultIfEmpty()
               Group Join defi1 In TABLE3 On lgde.Field(Of Decimal?)("KEY3") Equals defi1.Field(Of Decimal?)("KEY4") Into g2 = Group
             From defi In g2.DefaultIfEmpty()
               Group Join sett1 In TABLE4 On defi.Field(Of Decimal?)("KEY5") Equals sett1.Field(Of Decimal?)("KEY6") Into g3 = Group
             From sett In g3.DefaultIfEmpty()
               Group Join lst1 In TABLE5 On sett.Field(Of Decimal?)("KEY7") Equals lst1.Field(Of Decimal?)("KEY8") Into g4 = Group
             From lst In g4.DefaultIfEmpty()

( Select工作,这就是为什么我没有发布它)

我总是收到以下错误:

该值不能为空。参数名称:第336行System.Data.DataRowExensions.FieldT中的行。

知道为什么不行吗?

问候

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-11-30 16:44:03

我发现Group Join的性能比下面的语法更糟糕

代码语言:javascript
运行
复制
Dim queryResult = _
    From t1 In Table1
    From t2 In Table2.Where(Function(r2) r2.Id = t1.Id).DefaultIfEmpty()
    From t3 In Table3.Where(Function(r3) r3.Id2 = t2.Id2).DefaultIfEmpty()
    . . . . 

但是,除非您选择t1 (我们没有看到您的select部分),否则您可能需要在DefaultIfEmpty中提供一些内容

代码语言:javascript
运行
复制
.DefaultIfEmpty(New MyObject() With { . . . . })

因为如果你不这样做,你就会犯这个错误。这就是为什么你会得到这个错误的答案。获得它是因为您试图使用一个由于左联接而不存在的值。这与DB类似,当您检查列值是否为Null

票数 0
EN

Stack Overflow用户

发布于 2015-11-30 14:26:03

当您将DefaultIfEmpty()用于左外部联接时,似乎缺少了它所需的附加信息。

参见示例和重复问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34000114

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档