Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在使用LINQ和let时,如何处理未设置为对象实例的对象引用?_C#_Linq - Fatal编程技术网

C# 在使用LINQ和let时,如何处理未设置为对象实例的对象引用?

C# 在使用LINQ和let时,如何处理未设置为对象实例的对象引用?,c#,linq,C#,Linq,我有以下代码来获取有关公司的一些数据: XDocument doc = XDocument.Load(new StringReader(searchPayload)); XNamespace ns = ConfigurationManager.AppSettings["WebServiceNamespace"]; var businesses = (from node in doc.Descendants(ns + "searchResultsRecord")

我有以下代码来获取有关公司的一些数据:

XDocument doc = XDocument.Load(new StringReader(searchPayload));
XNamespace ns = ConfigurationManager.AppSettings["WebServiceNamespace"];

var businesses = (from node in doc.Descendants(ns + "searchResultsRecord")
                  let ABN = node.Element(ns + "ABN")
                  let mainName = node.Element(ns + "mainName")
                  let legalName = node.Element(ns + "legalName")
                  let mainTradingName = node.Element(ns + "mainTradingName")
                  let otherTradingName = node.Element(ns + "otherTradingName")
                  let mainBusinessPhysicalAddress = node.Element(ns + "mainBusinessPhysicalAddress")
                  select new
                  {
                      Name = new
                      { 
                          organisationName = (string)mainTradingName.Element(ns + "organisationName"),
                          score = (string)mainTradingName.Element(ns + "score"),
                          isCurrentIndicator = (string)mainTradingName.Element(ns + "isCurrentIndicator"),
                      },
                      ABN = new
                      {
                          identifierValue = (string)ABN.Element(ns + "identifierValue"),
                          identifierStatus = (string)ABN.Element(ns + "identifierStatus"),
                      },
                      Location = new
                      {
                          stateCode = (string)mainBusinessPhysicalAddress.Element(ns + "stateCode"),
                          postCode = (string)mainBusinessPhysicalAddress.Element(ns + "postcode"),
                          isCurrentIndicator = (string)mainBusinessPhysicalAddress.Element(ns + "isCurrentIndicator"),
                      }
                  }).ToList();
searchPayload是一条从web服务返回的SOAP消息,它返回多达200条searchResultRecords,其中一些记录有mainName节点、一些legalNode、一些all节点等等。如果我使用上面的代码,我会在主题中得到错误,因为显然不是所有的结果记录都有所有的节点,那么我如何处理这个问题呢

In Name=new我想获得可用的“Name”节点


谢谢

我在
let
中看不到任何可以通过的内容,因为
节点
应该始终为非空。在
之外,让
s在
blah.Element(..)
中使用它-因此您有两个选择:

  • 筛选出不起作用的(将删除数据):

  • 在使用
    .Element
    之前进行检查(某些字段默认为空):


与您在LINQ之外处理它的方式相同。这取决于你想要什么。第二个选项的语法是我想要的,我自己尝试过,但肯定是做错了什么。第一种选择会过滤掉太多的数据。谢谢
....
let mainTradingName = node.Element(ns + "mainTradingName")
where mainTradingName != null
....
...
organisationName = mainTradingName == null ? "" :
      (string)mainTradingName.Element(ns + "organisationName"),
...