gpt4 book ai didi

c# - 左外部联接,对象引用未设置为对象的实例

转载 作者:行者123 更新时间:2023-11-30 15:03:01 28 4
gpt4 key购买 nike

我正在尝试对 2 个对象执行左外连接并收到错误消息:未将对象引用设置为对象的实例。

物体看起来像那样

  var deliverables = OCHART.GetACAPValues(organization, ReportingPeriod, FiscalYear, "(09-10.10a) Outreach Significant").ToList();
var references = (from rf in OCHART.References where rf.RefType.Equals("09-10.10a") && rf.Comments.Equals("2") select rf).ToList();

其中可交付成果可能经常返回 0 条记录。不幸的是,我不能直接从数据库中连接两个表,因此可交付成果必须是一个对象。

谁能给我指出正确的方向

谢谢,

我的代码是

 var items = (from rf in references
join pt in deliverables on rf.Description equals pt.b into prt
from x in prt.Where(prt2 => prt2.a.Equals(audience)).DefaultIfEmpty()
where rf.RefType.Equals("09-10.10a") && rf.Comments.Equals("2")
select new
{
audience = (string)(audience == null ? "" : audience),
RefType = (string)(rf.RefType == null ? "" : rf.RefType),
RefOrder = (int)(rf.RefOrder == null ? 0 : rf.RefOrder),
refName = (string)(rf.Description == null ? "" : rf.Description),
collumn_attr = (string)(x.b == null ? string.Empty : x.b),
value = (int)(x.ACAP == null ? (int?)null : x.ACAP)
})
.OrderBy(o => o.RefOrder)
.Take(9)
.ToList();

编辑:经过更多调试后,我的代码中的以下几行似乎出现错误

collumn_attr = (string)(x.b == null ? string.Empty : x.b),
value = (int)(x.ACAP == null ? (int?)null : x.ACAP)

我注意到,即使我在可交付成果中有值(为测试而添加)并且当值匹配时,查询也会正确执行,但是当可交付成果中没有匹配项时,我就会收到错误消息。

问题可能与处理空值有关。

最佳答案

我认为 x 为 null 并在以下行中导致 NullReferenceException:

collumn_attr = (string)(x.b == null ? string.Empty : x.b),
value = (int)(x.ACAP == null ? (int?)null : x.ACAP)

这个判断是基于 from x in 行的 DefaultIfEmpty() 调用,典型的左外连接。

在数据库代码中,您可以编写类似x.ACAP == null 的代码来检测没有匹配连接元素的情况。如果您更改此设置,将“x.property == null”检查替换为“x == null”检查,我想您的问题会得到解决。

第二行仍然存在问题 - 如果您尝试将值 (int?)null 转换为整数,您将在运行时遇到异常。在 x == null 的情况下使用有意义的默认 int 值(例如 0)将清除它。

关于c# - 左外部联接,对象引用未设置为对象的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12115393/

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