2013-08-12 224 views
0

我對Linq to xml查詢有點問題。請參閱下面的數據。Linq to XML - 多級

<area id="16"> 
    <standard value="1"> 
     <temp value="M" /> 
    </standard> 
    <standard value="2"> 
     <temp value="M" /> 
    </standard> 
    <standard value="3"> 
     <temp value="M" /> 
    </standard> 
    </area> 

    <area id="17"> 
    <standard value="1"> 
     <temp value="M" /> 
    </standard> 
    <standard value="2"> 
     <temp value="M" /> 
    </standard> 
    <standard value="3"> 
     <temp value="M" /> 
    </standard> 
    </area> 

基本上,我想從xml中提取臨時值,當我有區域id和標準值作爲變量。

我可以通過下面的查詢

IEnumerable<XElement> area = 
     from c in areaRisk.Elements("area") 
     where (string)c.Attribute("id") == ddlArea.SelectedValue.ToString() 
     select c; 

獲得區,但我不能確定如何再利用的區域類似查詢的XElement枚舉或是否有可能修改上述查詢來獲取溫度值提取價值。

任何幫助將不勝感激!

感謝,

史蒂夫

回答

2

你可以做到這一切在一個查詢:

// change the assignment with whatever you want 
int areaId = 17; 
int standardValue = 3; 

基於語法的查詢解決方案:

string tempValue = 
    (from c in areaRisk.Elements("area") 
    where (int)c.Attribute("id") == areaId 
    from s in c.Elements("standard") 
    where (int)s.Attribute("value") == standardValue 
    select (string)c.Element("temp").Attribute("value")).FirstOrDefault(); 

或方法爲基礎的查詢:

string tempValue = areaRist.Elements("area") 
          .FirstOrDefault(a => (int)a.Attribute("id") == areaId) 
          .Elements("standard") 
          .FirstOrDefault(s => (int)s.Attribute("value") == standardValue) 
          .Element("temp") 
          .Attribute("value") 
          .Value; 
+0

謝謝,基於語法的解決方案會引起一個空引用錯誤,但會改變c.Element(「temp」)。Attribute(「value」))。FirstOrDefault(); s.Element(「temp」)修復了它。 –

+0

@SteveMcCall,而不是表示感謝,只是把他投票? –

0

假設您所在地區的ID都是唯一的,改變你的查詢只返回匹配區域是這樣的:

XElement area = 
    (from c in areaRisk.Elements("area") 
    where (string)c.Attribute("id") == ddlArea.SelectedValue.ToString() 
    select c).FirstOrDefault(); 

然後,你可以調用另一個Elements()它:

var result = area.Elements("standard").Select(s => new { 
    ID = s.Attribute("id").Value, 
    Temp = s.Element("temp").Attribute("value") 
}); 

,這將給你所有臨時ID和值。