我在使用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>
基本上,当我将区域ID和标准值作为变量时,我想从xml中提取临时值。
我可以通过以下查询获取该区域
IEnumerable<XElement> area =
from c in areaRisk.Elements("area")
where (string)c.Attribute("id") == ddlArea.SelectedValue.ToString()
select c;
但我不确定如何在区域XElement上使用类似的查询获取临时值,或者是否可以修改上述查询以提取值。
非常感谢任何帮助!
谢谢,
史蒂夫
答案 0 :(得分: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;
答案 1 :(得分: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和值。