0

我在使用 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 可枚举的类似查询来获取临时值,或者是否可以修改上述查询以提取值。

任何帮助将不胜感激!

谢谢,

史蒂夫

4

2 回答 2

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;
于 2013-08-12T10:35:56.120 回答
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 和值。

于 2013-08-12T10:37:56.667 回答