2011-01-04 10 views
1

Ich entwickle Windows Phone 7 Anwendung in Silverlight. Ich bin neu im Silverlight. Ich bin auch neu in LINQ to XML. In meiner Anwendung wählt der Benutzer das Datum & einige Transaktionsdetails in die Anwendung einreichen. Die Details werden in XML-Datei gespeichert. Ich bin mit der benutzerdefinierten Datumskontrolle in meiner Anwendung für die Auswahl Datum alsWie Abfrage aktuelle Woche und aktuellen Monat mithilfe von LINQ to XML?

 private void DatePicker_ValueChanged(object sender, DateTimeValueChangedEventArgs e) 
     { 
      AppObj = Application.Current as App; 
      AppObj.date = (DateTime)EntryDate.Value;   

     } 

folge dann der Wert von AppObj.date in der XML-Datei gespeichert wird. Manchmal verwende ich DateTime.Now, um das Datum in der XML-Datei zu speichern. Jetzt möchte ich den Bericht der übermittelten Transaktionsdetails generieren, indem ich über LINQ to XML abfrage. Ich möchte den Bericht für das heutige Datum, aktuelle Woche & aktuellen Monat generieren. Für den heutigen Datumsbericht verwende ich den folgenden Code

public class TransactionList : List<Transaction> 
{ 
    public void GetTransactionObjects(String strXMLFile, int Currency_ID, int TransactionType_ID) 
    {    
     XDocument doc = null; 
     XMLFileManager XMLDocObj = new XMLFileManager(); 
     doc = XMLDocObj.LoadXMLFile(strXMLFile); 

     DateTime today = DateTime.Today; 
     var vTransaction = doc.Descendants("Transaction") 
          .Where(x => ((DateTime)x.Element("Current_Date")).Date == today) 
          .Where(x => x.Element("TransactionType_ID").Value == TransactionType_ID.ToString()) 
          .Where(x => x.Element("Currency_ID").Value == Currency_ID.ToString())        
          .Select(x => new Transaction(x)); 
     this.Clear(); 
     AddRange(vTransaction);   

    } 
} 

Die Transaction-Klasse enthält den folgenden Konstruktor.

public Transaction(XElement xElement) 
    { 
     Transaction_ID = Convert.ToInt32(xElement.Element("Transaction_ID").Value.ToString()); 
     TransactionType_ID = Convert.ToInt32(xElement.Element("TransactionType_ID").Value.ToString()); 
     Alphabet_ID = Convert.ToInt32(xElement.Element("Alphabet_ID").Value.ToString()); 
     ID = Convert.ToInt32(xElement.Element("ID").Value.ToString()); 
     SubCategory_ID = Convert.ToInt32(xElement.Element("SubCategory_ID").Value.ToString()); 
     Item_ID = Convert.ToInt32(xElement.Element("Item_ID").Value.ToString()); 
     Currency_ID = Convert.ToInt32(xElement.Element("Currency_ID").Value.ToString()); 
     InputTypeMethod_ID = Convert.ToInt32(xElement.Element("InputTypeMethod_ID").Value.ToString());   
     Principle = Convert.ToInt32(xElement.Element("InputTypeMethod_ID").Value.ToString()); 
     Interest = Convert.ToInt32(xElement.Element("Interest").Value.ToString()); 
     ROI = Convert.ToInt32(xElement.Element("InputTypeMethod_ID").Value.ToString()); 
     Amount = Convert.ToInt32(xElement.Element("Amount").Value.ToString()); 
     //Current_Date = Convert.ToDateTime(xElement.Element("Current_Date").Value.ToString()); 
     Current_Date = ((DateTime)xElement.Element("Current_Date")).Date; 
    } 

In der XML-Datei der Wert wird für Datum & Zeit gespeichert. Der gespeicherte Wert wird als

<Transactions> 
     <Transaction> 
     <Transaction_ID>0</Transaction_ID> 
     <TransactionType_ID>0</TransactionType_ID> 
     <Alphabet_ID>3</Alphabet_ID> 
     <ID>0</ID> 
     <SubCategory_ID>0</SubCategory_ID> 
     <Item_ID>0</Item_ID> 
     <Currency_ID>3</Currency_ID> 
     <InputTypeMethod_ID>0</InputTypeMethod_ID> 
     <Principle>0</Principle> 
     <Interest>0</Interest> 
     <ROI>0</ROI> 
     <Amount>5000</Amount> 
     <Current_Date>2010-12-31T18:08:23.433+05:30</Current_Date> 
     </Transaction> 
    </Transactions>   

Blick auf die

Knoten folgt

2010-12-31T18: 08: 23,433 + 05: 30

das Datumsformat ist yyyy-mm-dd.

Wie soll ich nun die folgende Abfrage schreiben, um alle übermittelten Transaktionsdetails für die aktuelle Woche sowie den aktuellen Monat zu erhalten?

Können Sie mir bitte einen Code oder einen Link zur Verfügung stellen, über den ich das oben genannte Problem lösen kann? Wenn ich irgendetwas falsch mache, dann führe mich bitte.

Antwort

0

Der folgende Code wird die aktuelle Woche Zusammenfassung geben:

DateTime startDate = DateTime.Today.Date.AddDays(-(int)DateTime.Today.DayOfWeek), // prev sunday 00:00 
endDate = startDate.AddDays(7); // next sunday 00:00 

var vTransaction = from x in doc.Descendants("Transaction") 
           where ((DateTime)x.Element("Current_Date")).Date >= startDate 
           && ((DateTime)x.Element("Current_Date")).Date < endDate 
           where x.Element("TransactionType_ID").Value == TransactionType_ID.ToString() 
           select new Transaction(x); 

Der folgende Code wird der aktuelle Monat Zusammenfassung

geben
int CurrentYear = DateTime.Today.Year; 
int CurrentMonth = DateTime.Today.Month; 

DateTime startDate = new DateTime(CurrentYear, CurrentMonth, 1); 
DateTime endDate = startDate.AddMonths(1).AddMinutes(-1); 

var vTransaction = from x in doc.Descendants("Transaction") 
            where ((DateTime)x.Element("Current_Date")).Date >= startDate 
            && ((DateTime)x.Element("Current_Date")).Date < endDate 
            where x.Element("TransactionType_ID").Value == TransactionType_ID.ToString() 
            select new Transaction(x); 

ODER beide Abfragen können für die aktuelle Woche des ausgewählten Datums & aktuellen Monat des ausgewählten Datums wie folgt

write sein
public void GetCurrentWeekSummary(String strXMLFile, int TransactionType_ID, DateTime selectedDate) 
{ 
       XDocument doc = null; 
       XMLFileManager XMLDocObj = new XMLFileManager(); 
       doc = XMLDocObj.LoadXMLFile(strXMLFile); 

       DateTime startDate = selectedDate.Date.AddDays(-(int)selectedDate.DayOfWeek), // prev sunday 00:00 
       endDate = startDate.AddDays(7); // next sunday 00:00 

       var vTransaction = from x in doc.Descendants("Transaction") 
          where ((DateTime)x.Element("Current_Date")).Date >= startDate 
          && ((DateTime)x.Element("Current_Date")).Date < endDate 
          where x.Element("TransactionType_ID").Value == TransactionType_ID.ToString() 
          select new Transaction(x); 
} 



public void GetCurrentMonthSummary(String strXMLFile, int TransactionType_ID, DateTime selectedDate) 
{ 
       XDocument doc = null; 
       XMLFileManager XMLDocObj = new XMLFileManager(); 
       doc = XMLDocObj.LoadXMLFile(strXMLFile); 

       int CurrentYear = selectedDate.Year; 
       int CurrentMonth = selectedDate.Month; 

       DateTime startDate = new DateTime(CurrentYear, CurrentMonth, 1); 
       DateTime endDate = startDate.AddMonths(1).AddMinutes(-1); 


       var vTransaction = from x in doc.Descendants("Transaction") 
           where ((DateTime)x.Element("Current_Date")).Date >= startDate 
           && ((DateTime)x.Element("Current_Date")).Date < endDate 
           where x.Element("TransactionType_ID").Value == TransactionType_ID.ToString() 
           select new Transaction(x); 
}