我的LINQ to XML代码中的空引用异常

时间:2011-04-22 07:56:37

标签: c# xml linq linq-to-xml nullreferenceexception

我一直在努力将XML文件链接到下拉列表和网格视图。

我已经设法从XML文档填充一个下拉列表,然后将gridview填充到另一个,但是当尝试添加where子句时,我得到一个空引用异常并且不确定原因。我该如何解决这个问题?

XDocument xmlDoc = XDocument.Load(Server.MapPath("XMLFile.xml"));
var q = from c in xmlDoc.Descendants("Images")
        where c.Attribute("PropertyId").Value == DropDownList1.SelectedValue.ToString()
        select new
        {
            PropertyID = c.Element("ThumbUrl").Value,
        };
GridView1.DataSource = q;
GridView1.DataBind();

4 个答案:

答案 0 :(得分:6)

避免使用.Value;可以使用一系列零安全隐式转换运算符:

var q = from c in xmlDoc.Descendants("Images")
        where (string)c.Attribute("PropertyId")
               == DropDownList1.SelectedValue.ToString()
        select new
        {
            PropertyID = (string)c.Element("ThumbUrl"),
        };

答案 1 :(得分:1)

其中任何一个:

c.Attribute("PropertyId")
c.Element("ThumbUrl")
DropDownList1.SelectedValue

可以为null,然后对它们调用.ToString()或.Value会给你看到的异常。

如果您不乐意通过NullReferenceExceptions捕获XML问题,那么您需要将Attribute()调用的值转换为局部变量然后对其进行测试(或者调用它两次并测试第一次调用null )。

答案 2 :(得分:0)

尝试: 条件部分where c.Attribute("PropertyId") != null && c.Attribute("PropertyId").Value == DropDownList1.SelectedValue.ToString()c.Element("ThumbUrl") != null。您的代码应如下所示:

XDocument xmlDoc = XDocument.Load(Server.MapPath("XMLFile.xml"));
var q = from c in xmlDoc.Descendants("Images")
        where c.Attribute("PropertyId") != null 
        && c.Attribute("PropertyId").Value == DropDownList1.SelectedValue.ToString() 
        && c.Element("ThumbUrl") != null
        select new
        {
            PropertyID = c.Element("ThumbUrl").Value,
        };
GridView1.DataSource = q;
GridView1.DataBind();

答案 3 :(得分:0)

from x in document.Descendants("Images")
let xElement = x.Element("PropertyId")
where xElement != null && xElement.Value == DropDownList1.SelectedValue.ToString()
select new
{
   PropertyID = c.Element("ThumbUrl").Value,
};