我正在查询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
文件中找到则可以正常工作。但是,我有一个案例,我的查询将导致null。如果我没有值,它会在xml
文件中生成一个条目,我的查询显然会导致null
。我的问题是我如何迎合这一点而不会导致我的程序崩溃。显然,singleordefault()
无效。
的 的 ** * ** * ** * 的** * ** * ** 已编辑 * ** * ** * ** * ** * ** * ** * ** * ***
我读到了目前为止大家所说的内容,但它仍然有问题但是我仍有问题。
if (query.Count() == 0)
{
Debug.WriteLine("NULL");
}
else {
var resultquery = query.SingleOrDefault();
Debug.WriteLine("NOT NULL");
}
OR
if (query == null)
{
Debug.WriteLine("NULL");
}
else {
var resultquery = query.SingleOrDefault();
Debug.WriteLine("NOT NULL");
}
OR
var resultquery = query.SingleOrDefault();
if (resultquery == null)
{
Debug.WriteLine("NULL Result");
}
else
{
Debug.WriteLine("NOT NULL");
}
当if语句的第一部分为true时,我收到System.NullReferenceException
错误。一位用户说要执行此操作:var resultquery = query.SingleOrDefault();
然后使用我的if..else语句进行比较。但是,我在将query.singleofdefault()
分配给resultquery
时收到错误。所以我很迷茫..希望有人可以帮忙。谢谢
答案 0 :(得分:2)
我想要了解的是这个。文档说明如果结果查询为0,它将给出一个默认值,如果不是,它将是一个单独的值。那么为什么这不给出默认值呢? [取自评论]
null
是引用类型的默认值。显然,AllowancePaid
是一种引用类型(自定义class
)。
答案 1 :(得分: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
}