0

下面是我正在检查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"));
4

2 回答 2

1

这是您可以获得该异常的潜在场所

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")) && ...
于 2013-09-20T09:00:16.577 回答
1

您可以通过像这样拆分查询来找出问题所在:

// 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 会告诉您异常的确切来源。

于 2013-09-20T09:01:49.617 回答