gpt4 book ai didi

vb.net - 使用 VB.NET 和 LINQ 的左外连接 null

转载 作者:行者123 更新时间:2023-12-01 01:32:38 27 4
gpt4 key购买 nike

我有我认为是有效的左外连接 LINQ查询,但由于连接右侧的空值,我在选择时遇到问题。这是我到目前为止所拥有的

 Dim Os = From e In oExcel
Group Join c In oClassIndexS On c.tClassCode Equals Mid(e.ClassCode, 1, 4)
Into right1 = Group _
From c In right1.DefaultIfEmpty
我要全部归还 e以及来自 c 的一列叫 tClassCode .我想知道语法是什么。如您所见,我正在使用 VB.NET .
更新...
这是在执行 join 时出现错误的查询:

_message = "Object reference not set to an instance of an object."

 Dim Os = From e In oExcel
Group Join c In oClassIndexS On c.tClassCode Equals Mid(e.ClassCode, 1, 4)
Into right1 = Group _
From c In right1.DefaultIfEmpty
Select e, c.tClassCode
如果我从选择中删除 c.tClassCode,查询运行不会出错。所以我想也许我需要做一个新的选择,但我也不认为我这样做是正确的。

最佳答案

编辑:您需要检查c为空,特别是 c分组后。请参阅下面的我的更新。

您需要对 tClassCode 进行空检查c在您的选择语句中。什么类型是tClassCode ?您应该能够对值 c 进行空检查。如果它为空,则转换为相应类型的可空值并返回它,否则返回实际值。

因为我不确定是什么 tClassCode让我们假设它是一个整数,在这种情况下,转换将是一个可为空的整数( Integer? )。考虑到这一点,您的 select 语句将添加到您目前所拥有的内容的末尾,应该类似于:

tClassCode是您的代码将类似于的字符串:

Select _
e, _
Code = If(c Is Nothing, Nothing, c.tClassCode)

如果 c,取决于您需要做什么为空,您可以返回 String.Empty而不是 Nothing :
Select _
e, _
Code = If(c Is Nothing, String.Empty, c.tClassCode)

当然,您可以进一步扩展“e”的选择以按名称投影其特定列。

要意识到的重要一点是您必须检查 c在使用其任何属性之前为 null,因为它可能为 null,具体取决于特定结果(行)的左外连接结果。回到我之前的示例,如果您有另一个名为 Priority 的字段那是一个整数,您将针对可空​​类型进行转换:
Select _
e, _
Priority = If(c Is Nothing, CType(Nothing, Integer?), c.Priority)

关于vb.net - 使用 VB.NET 和 LINQ 的左外连接 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3805337/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com