【问题标题】:linq query to xml with variable having clause带有变量具有子句的 linq 查询到 xml
【发布时间】:2011-08-18 14:54:04
【问题描述】:

尝试从以下 xml 创建 linq 查询。

<root>
  <mileage value="100">
  </mileage>
  <mileage value="75">
  </mileage>
  <mileage value="60">
  </mileage>
   <mileage value="50">
  </mileage>
</root>

输出需要迭代xml树获取里程节点中的所有里程值,并在大于或等于50、大于或等于75和大于或等于100时计算每个总数。所以输出将是:

<root>
      <mileage value="100" count="1"/>
      <mileage value="75" count="2"/>
      <mileage value="50" count="4"/>
</root>

不知道从哪里开始

【问题讨论】:

  • 感谢您提醒我,数字应该是 50 的值应该是 4,75 的值应该是 3(不是 2),100 的值应该是 1。所以 75 关闭了一个。
  • 实际上,我想,当我写评论时,我完全糊涂了 ;-) 所有的值都是正确的,有两个 75 或更大的条目:75 和 100。所以,值 2 是正确。
  • 代码产生价值的运气

标签: asp.net xml linq


【解决方案1】:

这是一段完全符合您要求的代码。您应该添加错误处理并考虑并非所有属性都存在或它们不是您期望的情况(例如,里程值不是 int)。

    static void Main(string[] args)
    {
        XElement result = new XElement("root");
        int[] groupValues = { 100, 75, 50 };

        string xml = "<root><mileage value=\"100\"></mileage><mileage value=\"75\"></mileage><mileage value=\"60\"></mileage><mileage value=\"50\"></mileage></root>";
        XElement element = XElement.Parse(xml);

        foreach (int groupValue in groupValues)
        {
            var newGroup = new XElement("mileage");
            newGroup.Add(new XAttribute("value", groupValue));
            newGroup.Add(new XAttribute("count", element.Elements("mileage").Count(m => int.Parse(m.Attribute("value").Value) >= groupValue)));

            result.Add(newGroup);
        }

        Console.WriteLine(result.ToString());
        Console.ReadKey();
    }

【讨论】:

  • 哇,非常感谢,正是我所需要的,阿方索你能证明一下吗:m => int.Parse(m.Attribute("value").Value) >= groupValue)
  • 不客气! m 是当前 xml 中的里程元素。该行检索该节点的“值”属性,它是一个字符串,然后将其解析为一个整数。因此,仅当“value”属性大于或等于 groupValue (即组的值)(100、75 或 50)时,才会计算元素。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-12
相关资源
最近更新 更多