Asp.net 使用变量having子句对xml的linq查询

Asp.net 使用变量having子句对xml的linq查询,asp.net,xml,linq,Asp.net,Xml,Linq,正在尝试从以下xml创建linq查询 <root> <mileage value="100"> </mileage> <mileage value="75"> </mileage> <mileage value="60"> </mileage> <mileage value="50"> </mileage> </root> 当大于或等于5

正在尝试从以下xml创建linq查询

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

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

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


不确定从何处开始

这里有一段代码,完全符合您的要求。您应该添加错误处理,并考虑不存在所有属性的情况,或者它们不是您所期望的(例如,里程值不是INT)。
static void Main(字符串[]args)
{
XElement结果=新XElement(“根”);
int[]groupValues={100,75,50};
字符串xml=”“;
XElement元素=XElement.Parse(xml);
foreach(groupValues中的int groupValue)
{
var newGroup=新项目(“里程”);
添加(新的XAttribute(“value”,groupValue));
newGroup.Add(newxattribute(“count”,element.Elements(“miliety”).count(m=>int.Parse(m.Attribute(“value”).value)>=groupValue));
结果。添加(新组);
}
Console.WriteLine(result.ToString());
Console.ReadKey();
}

感谢您提醒我注意,数字应该是50,值应该是4,值75应该是3(不是2),值100应该是1。所以75分差了一分。事实上,我想,当我写我的评论时,我完全糊涂了;-)所有值均正确,有两个75或更大的条目:75和100。因此,值2是正确的。如果代码中有任何生成值的机会,那么,非常感谢,这正是我所需要的alfonso,您可以计算一下:m=>int.Parse(m.Attribute(“value”).value)>=groupValue)不客气!m是当前xml中的里程元素。该行检索该节点的“value”属性,即字符串,然后将其解析为整数。因此,只有当“value”属性大于或等于groupValue(组的值)(100、75或50)时,才对元素进行计数。
    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();
    }