C# 如何获取包含某些“XML”的XML元素范围;价格“;在C中#

C# 如何获取包含某些“XML”的XML元素范围;价格“;在C中#,c#,.net,xml,linq,C#,.net,Xml,Linq,我试图用linq获取XML文件的一系列值,这些值在一定的价格范围内,我不太确定如何实现,但我知道如何获取每个元素的价格 我试着列出每种元素的价格,然后应用范围内的所有内容,但我不知道如何保持品牌,因为我必须展示价格范围内现有汽车的品牌 XML: 显然,我只得到了“100”值,但我希望得到100到120之间的范围(作为示例),但不确定如何做到这一点。您可能希望将价格解析为十进制或其他数字类型。然后可以执行范围检查。比如说 var carInRange = str.Elements("Car")

我试图用linq获取XML文件的一系列值,这些值在一定的价格范围内,我不太确定如何实现,但我知道如何获取每个元素的价格

我试着列出每种元素的价格,然后应用范围内的所有内容,但我不知道如何保持品牌,因为我必须展示价格范围内现有汽车的品牌

XML:


显然,我只得到了“100”值,但我希望得到100到120之间的范围(作为示例),但不确定如何做到这一点。

您可能希望将价格解析为十进制或其他数字类型。然后可以执行范围检查。比如说

var carInRange = str.Elements("Car")
                     .Where(x => decimal.TryParse(x.Element("Price").Value, out decimal price)
                                 && price < 100m))
                     .ToList();
var carInRange=str.Elements(“汽车”)
其中(x=>decimal.TryParse(x.Element(“Price”).Value,不含十进制价格)
&&价格(亿美元以下)
.ToList();

您可能希望将价格解析为
十进制
或其他数字类型。然后可以执行范围检查。比如说

var carInRange = str.Elements("Car")
                     .Where(x => decimal.TryParse(x.Element("Price").Value, out decimal price)
                                 && price < 100m))
                     .ToList();
var carInRange=str.Elements(“汽车”)
其中(x=>decimal.TryParse(x.Element(“Price”).Value,不含十进制价格)
&&价格(亿美元以下)
.ToList();

使用XPath怎么样?它比嵌套linq操作更具可读性:

var carsInRange = xml.XPathSelectElements("/Car[Price > 100 and Price <= 120]");

var carsInRange=xml.XPathSelectElements(“/Car[Price>100和Price 100和Price使用XPath怎么样?它比嵌套linq操作更可读:

var carsInRange = xml.XPathSelectElements("/Car[Price > 100 and Price <= 120]");

var carsInRange=xml.XPathSelectElements(“/Car[Price>100和Price 100,Price几乎满足了我的需求,但我想指定最低价格和最高价格,在本例中,例如double minimumPrice=100;double maximumPrice=120;您可以使用任何需要的条件表达式。在本例中,您可以使用
decimal.TryParse(…)&&price>=minimumPrice&&price几乎满足了我的需求,但我想指定最低价格和最高价格,在本例中,例如double minimumPrice=100;double maximumpprice=120;您可以使用任何条件表达式。在本例中,您可以使用
decimal.TryParse(…)&&price>=minimumPrice&&price
var cars = xml.Elements("Car");
var carsInRange2 = from c in cars
                   let price = (decimal)c.Element("Price")
                   where price > 100 && price <= 120
                   select c;

Console.WriteLine(carsInRange2.Count());
using System;
using System.Linq;
using System.Xml.Linq;
using System.Xml.XPath;

internal class Program
{
    private static void Main(string[] args)
    {
        var data = @"<Garage>
                       <Car id=""001"">
                        <Brand>Foo</Brand>
                        <Price>100</Price>
                       </Car>
                       <Car id=""002"">
                         <Brand>Bar</Brand>
                         <Price>130</Price>
                       </Car>
                       <Car id=""003"">
                         <Brand>Re</Brand>
                         <Price>110</Price>
                       </Car>
                     </Garage>";

        var xml = XElement.Parse(data);

        var carsInRange = xml.XPathSelectElements("/Car[Price > 100 and Price <= 120]");

        Console.WriteLine(carsInRange.Count());

        var cars = xml.Elements("Car");
        var carsInRange2 = from c in cars
                           let price = (decimal)c.Element("Price")
                           where price > 100 && price <= 120
                           select c;

        Console.WriteLine(carsInRange2.Count());

        Console.ReadKey();
    }
}