当没有发现记录在 lambda 表达式中引发异常时
本文关键字:异常 表达式 lambda 发现 记录 | 更新日期: 2023-09-27 18:32:11
下面是我正在检查TransmediaTable
和过滤的代码。
我手动创建了一个案例来满足条件并给出预期的结果。但是当取新样本时,结果抛出异常Object reference not set to Instance of Object
。我哪里出错了。
var MissedTransmedias = XMLOperations.TransmediaTable.AsEnumerable()
.Where(x => x.Field<String>("TO_STRUCTURE_NAME").Contains("CAB:DSLAM") &&
x.Field<String>("BT_CABLE_TYPE") == "BFT" &&
string.IsNullOrEmpty(x.Field<String>("TO_EQUIPMENT_NAME")) &&
((x.Field<String>("BT_CABLE_DESIGNATION") + x.Field<String>("BT_CABLE_NUMBER")) == OnNumber))
.Select(x => x.Field<String>("TRANSMEDIA_NAME"));
这是潜在的 plase,您可以在其中获得该异常
x => x.Field<String>("TO_STRUCTURE_NAME").Contains("CAB:DSLAM")
您可以使用如下方法修复代码:
.Where(x => ((x.Field<String>("TO_STRUCTURE_NAME") == null)
? fasle :
x.Field<String>("TO_STRUCTURE_NAME").Contains("CAB:DSLAM")) && ...
您可以通过像这样拆分查询来找出问题所在:
// renamed to keep it short
var data = XMLOperations.TransmediaTable.AsEnumerable();
data = data.Where(x => x.Field<String>("TO_STRUCTURE_NAME").Contains("CAB:DSLAM"))
data = data.Where(x => x.Field<String>("BT_CABLE_TYPE") == "BFT")
data = data.Where(x => string.IsNullOrEmpty(x.Field<String>("TO_EQUIPMENT_NAME")))
data = data.Where(x => ((x.Field<String>("BT_CABLE_DESIGNATION") + x.Field<String>("BT_CABLE_NUMBER")) == OnNumber))
data = data.Select(x => x.Field<String>("TRANSMEDIA_NAME"));
您将能够轻松了解那里发生了什么,因为在调试时,IDE 会告诉您异常的确切来源。