Пустая ссылка исключение в моем коде LINQ to XML - PullRequest
1 голос
/ 22 апреля 2011

Я поигрался со связыванием XML-файлов с выпадающими списками и сетками.

Мне удалось заполнить один раскрывающийся список из XML-документа, а затем просмотреть сетку в другом, но при попытке добавить предложение 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 ]

6 голосов
/ 22 апреля 2011

Избегайте использования .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 голос
/ 22 апреля 2011

Любой из них:

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

может быть нулевым, и затем вызов .ToString () или .Value для них даст вам исключение, которое вы видите.

Если вы не рады отлавливать проблемы с XML с помощью NullReferenceExceptions, тогда вам нужно взять значение вызова Attribute () в локальную переменную, а затем проверить его (или дважды вызвать и проверить первый вызов на нулевое значение). ).

0 голосов
/ 11 марта 2014
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,
};
0 голосов
/ 22 апреля 2011

Try: 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();
...