簡體   English   中英

Linq to XML single或default

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM