Linq 查询"Object reference not set to an instance of an object"



我有两个简单的Web服务方法,它们可以查询我通过javascript查询的XML文档(存储在HTTP缓存中)。当我为aff参数传入一个完全有效的数据项时,GetCitiesForAffiliate()方法在"select new"行上抛出NullReferenceException。它适用于aff参数中的其他数据。另一种方法也能很好地工作,即使使用导致另一个方法爆炸的相同aff参数。

我刚刚验证了我正在查询的XML。当我传入一个不存在的aff时,这两个方法都只返回一个空的json字符串,这没关系?

[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public string GetCitiesForAffiliate(string aff)
{
LocationService loc = new LocationService();
var query = (from center in loc.centersXml.Descendants("Center")
where center.Element("ServiceArea").Value.Equals(aff)
select new {
City = center.Element("City").Value
}).Distinct().OrderBy(x => x.City);
JavaScriptSerializer serializer = new JavaScriptSerializer();
string json = serializer.Serialize(query);
return json;
}
[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public string GetCentersForAffiliateCity(string aff, string city)
{
LocationService loc = new LocationService();
var query = (from center in loc.centersXml.Descendants("Center")
where center.Element("ServiceArea").Value.Equals(aff) && center.Element("City").Value.Equals(city)
select new { 
ID = center.Element("ID").Value,
Name = center.Element("Name").Value 
}).Distinct().OrderBy(x => x.Name);
JavaScriptSerializer serializer = new JavaScriptSerializer();
string json = serializer.Serialize(query);
return json;
}

如果您的一些节点缺少City元素,您可以根据您想要的输出进行一些选择:

1) 添加检查以查看City元素是否为null:

City = (center.Element("City") == null ? null : center.Element("City").Value)

2) 添加where子句以忽略具有空城市的元素:

where center.Element("ServiceArea").Value.Equals(aff) 
and center.Element("City") != null

相关内容

最新更新