![](/img/trans.png)
[英]How to write a single LINQ to XML query to iterate through all the child elements & all the attributes of the child elements?
[英]Linq to XML single or default
我正在查詢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");
}
要么
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");
}
當if語句的第一部分為true時,我收到System.NullReferenceException
錯誤。 一個用戶說要這樣做: var resultquery = query.SingleOrDefault();
然后使用我的if..else語句進行比較。 但是我在指定的點得到錯誤query.singleofdefault()
來resultquery
。 所以我很迷茫..希望有人可以幫忙。 謝謝
我想要了解的是這個。 文檔說明如果結果查詢為0,它將給出一個默認值,如果不是,它將是一個單獨的值。 那么為什么這不給出默認值呢? [摘自評論]
null
是引用類型的默認值。 顯然, AllowancePaid
是一種引用類型(自定義class
)。
沒有找到值時,您想要的值是多少。
你可以這樣做:
if (resultquery == null) {
// Logic for No result
} else {
// Logic for result found
}
或者您可以強制使用默認值
例如。
var resultquery = query.SingleOrDefault() ?? new AllowancePaid();
UPDATE
從發布的評論看來,空引用異常實際上是在查詢本身內引起的,而不是由結果查詢的賦值和稍后的使用引起的。
此更新的查詢應該可以解決問題
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
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.