Linq到XML查询日期间隔

时间:2010-04-22 15:48:36

标签: c# datetime linq-to-xml

我正在使用具有以下格式的大型xml文件:

<Sales>
  <Sale>
    <Date>04/20/2010</Date>
    <Time>18:17:29</Time>
    <Id>P00000001</Id>
    <Name>Prod Name</Name>
    <Description>Prod Desc</Description>
    <Category>Prod Category</Category>
    <Subcategory>Prod Subcategory</Subcategory>
    <Size>Prod Size</Size>
    <Price>25</Price>
    <Image>image path</Image>
  </Sale>
<Sales>

我的目标是显示价格和计算一段时间内销售的商品的总和:

    XDocument xmlDoc = XDocument.Load("Data.xml");

        DateTime date = new DateTime();
        var queryWeek = from sale in xmlDoc.Descendants("Sale")
                        where ((sale.Element("Date")>= date.Date.AddDays(-7)) && ((sale.Element("Date")<= date.Date())))
                        select sale.Element("Price");

       Console.WriteLine("",queryWeek);

调试器抱怨: 错误1运算符'&gt; ='无法应用于

类型的操作数
'System.Xml.Linq.XElement' and 'System.DateTime'

Error 2 Non-invocable member 'System.DateTime.Date' cannot be used like a method. 
请帮忙 德文

2 个答案:

答案 0 :(得分:1)

您正在尝试比较DateTime和XElement。您需要将XElement更改为DateTime以进行比较:DateTime.Parse(sale.Element("Date").Value) >= date.Date.AddDays(-7)

答案 1 :(得分:0)

您可以使用此技术(在.NET 3.5和4.0中)将XElement显式转换为DateTime:

http://msdn.microsoft.com/en-us/library/bb343203.aspx

XElement root = new XElement("Root", new DateTime(2006, 10, 6, 12, 30, 0));
// Cast from a strictly formatted XML element.
DateTime dt = (DateTime)root;