2010-10-30 166 views
1

我想從xml中獲取值,並且有空值的問題。我使用這個查詢來獲取從屬性「RODZ」所有不爲空值,而這個代碼的工作,但它返回我空值過:/Linq空值查詢問題

XDocument loaded = XDocument.Load(@"c:\TERC.xml"); 

var q = (from c in loaded.Descendants("catalog") 
        from r in c.Descendants("row") 
        select r.Descendants("col").Where(col1 => 
          col1.Attribute(XName.Get("name")).Value == 
          "RODZ").Where(kc => kc.ToString() != "").FirstOrDefault().Value ?? "0").ToList(); 

提斯是一個大問題了我,因爲我必須分析所有數值爲int,而這個查詢不起作用:

var q = (from c in loaded.Descendants("catalog") 
        from r in c.Descendants("row") 
        select int.Parse(r.Descendants("col").Where(col1 => 
          col1.Attribute(XName.Get("name")).Value == 
          "RODZ").Where(kc => kc.ToString() != "").FirstOrDefault().Value ?? "0") 

       ).ToList(); 

我想要得到0時該值爲空,因爲我後來將其轉換爲枚舉。

你看這個代碼有什麼用嗎?

<?xml version="1.0" encoding="UTF-8" ?> 
<teryt> 
<catalog name="Compix"> 
<row> 
    <col name="NAME">Name1</col> 
    <col name="ID"/> 
    </row> 
<row> 
    <col name="NAME">Name2</col> 
    <col name="ID">1</col> 
    </row> 
<row> 
    <col name="NAME">Name3</col> 
    <col name="RODZ">2</col> 
    </row> 
</catalog> 
</teryt> 

回答

1

您的問題是在該位:

where(kc => kc.ToString() != "") 

將其更改爲:

where(kc => !string.IsEmptyOrNull(kc.Value)) 
+0

我看到:)但現在FirstOrDefault()值給我exceptiom,當值爲null。 。我不擅長linq:/ – user278618 2010-10-30 10:33:14

+0

已更新。使用IsEmptyOrNull。 – Aliostad 2010-10-30 10:37:24