linq查询到带有变量having子句的xml

时间:2011-08-18 14:54:04

标签: asp.net xml linq

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

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

输出需要迭代xml树获取里程节点中的所有里程值,并在大于或等于50,大于或等于75且大于或等于100时计算每个总数。因此输出将为:< / p>

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

不知道从哪里开始

1 个答案:

答案 0 :(得分:0)

这是一段完全符合您要求的代码。您应该添加错误处理并考虑不存在所有属性的情况或者它们不是您期望的情况(例如里程值不是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();
    }