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
....
let mainTradingName = node.Element(ns + "mainTradingName")
where mainTradingName != null
....
...
organisationName = mainTradingName == null ? "" :
(string)mainTradingName.Element(ns + "organisationName"),
...