1

我正在查询一个xml并且我正在使用存储结果singleordefault

    var query = from nm in xelement.Descendants("EmployeeFinance")
                where (int)nm.Element("EmpPersonal_Id") == empID
                select new AllowancePaid
                {
                    gradeTaxId = nm.Element("Allow-GradeTax").Elements("Amount").Attributes("BenListId").Select(a => (int)a).ToList(),
                    gradeTaxAmt = nm.Element("Allow-GradeTax").Elements("Amount").Select(a => (double)a).ToList()
                };
    Debug.WriteLine("2");
    var resultquery = query.SingleOrDefault();

现在这一行:var resultquery = query.SingleOrDefault();如果在xml文件中找到它就可以正常工作。但是,我有一种情况,我的查询将导致空值。如果我没有值,它会在xml文件中创建一个条目,我的查询显然会导致null. 我的问题是我如何在不导致我的程序崩溃的情况下满足这一点。显然,singleordefault()不起作用。

** * ** * ** * ** * ** * **已编辑* ** * ** * ** * ** * ** * ** * ** * ***

到目前为止,我阅读了每个人都说的话,这是有道理的,但我仍然遇到问题。

    if (query.Count() == 0)
    {
        Debug.WriteLine("NULL");


    }
    else {
        var resultquery = query.SingleOrDefault();             
        Debug.WriteLine("NOT NULL");
    }

或者

        if (query == null)
        {
            Debug.WriteLine("NULL");


        }
        else {
            var resultquery = query.SingleOrDefault();             
            Debug.WriteLine("NOT NULL");
        }

或者

   var resultquery = query.SingleOrDefault();
    if (resultquery == null)
    {
        Debug.WriteLine("NULL Result");
    }
    else
    {
        Debug.WriteLine("NOT NULL");
    }

System.NullReferenceException当 if 语句的第一部分为真时,我得到一个错误。一位用户说要这样做:var resultquery = query.SingleOrDefault();然后使用我的 if..else 语句进行比较。但是,我在分配query.singleofdefault()给时遇到了错误resultquery。所以我迷路了..希望有人能帮忙。谢谢你

4

2 回答 2

2

我想了解的是这个。文档指出,如果结果查询为 0,它将给出一个默认值,如果不是,它将是一个值。那么为什么这不给出默认值呢?[取自评论]

null 引用类型的默认值。显然AllowancePaid是引用类型(自定义class)。

于 2013-10-25T15:48:03.097 回答
1

当没有找到值时,您想要的值是多少。

你可以这样做:

if (resultquery == null) { 
   // Logic for No result
} else {
   // Logic for result found
}

或者您可以强制使用默认值

例如。

 var resultquery = query.SingleOrDefault() ?? new AllowancePaid();

更新

从发布的评论看来,空引用异常实际上是在查询本身内部引起的,而不是由分配给 resultquery 和稍后使用引起的。

这个更新的查询应该可以解决问题

var query = from nm in xelement.Descendants("EmployeeFinance")
            where  nm.Element("EmpPersonal_Id") != null 
                   && (int)nm.Element("EmpPersonal_Id") == empID
                   && nm.Element("Allow-GradeTax") != null
                   && nm.Element("Allow-GradeTax").Elements("Amount") != null
            select new AllowancePaid
            {
                gradeTaxId = nm.Element("Allow-GradeTax").Elements("Amount").Attributes("BenListId").Select(a => (int)a).ToList(),
                gradeTaxAmt = nm.Element("Allow-GradeTax").Elements("Amount").Select(a => (double)a).ToList()
            };

var resultquery = query.SingleOrDefault();

if (resultquery == null) { 
  Debug.WriteLine("NULL Result");
} else {
   // Logic here
}
于 2013-10-25T15:41:15.173 回答