2010-04-22 4 views
0

J'utilise un grand fichier XML ayant dans le format suivant:Linq à des intervalles de date de requête 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> 

mon objectif est d'afficher pour résumer les prix et compter les articles vendus pour une période de temps:

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); 

débogueur se plaint: erreur 1 Opérateur '> =' ne peut pas être appliqué aux opérandes de type

'System.Xml.Linq.XElement' and 'System.DateTime' 

Error 2 Non-invocable member 'System.DateTime.Date' cannot be used like a method. 

aide s'il vous plaît devin

Répondre

1

Vous tentez de comparer un DateTime et le XElement. Vous devez modifier le XElement à un DateTime pour la comparaison: DateTime.Parse(sale.Element("Date").Value) >= date.Date.AddDays(-7).

0

Vous pouvez être en mesure de convertir explicitement le XElement à un DateTime en utilisant cette technique (en .NET 3.5 & 4.0):

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;