2011-01-04 5 views
1

Я разрабатываю приложение окна телефона 7 в silverlight. Я новичок в серебряном свете. Я также новичок в LINQ to XML. В моем приложении пользователь выбирает дату &, чтобы отправить некоторые детали транзакции в приложение. Детали сохраняются в XML-файле. Я использую пользовательский элемент управления даты в моем приложении для выбора даты следующимКак запросить текущий отчет текущего месяца и текущего месяца с помощью LINQ to XML?

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

     } 

Тогда значение AppObj.date сохраняется в файле XML. Иногда я использую DateTime.Now для хранения даты в XML-файле. Теперь я хочу сгенерировать отчет о представленных деталях транзакций путем запроса через LINQ to XML. Я хочу создать отчет для сегодняшней даты, текущей недели & текущего месяца. На сегодняшний день я использую следующий код:

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

    } 
} 

Класс Transaction содержит следующий конструктор.

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

В XML-файле значение получает хранится на дату & время. Значение получает хранится следующим

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

Посмотрите на узле

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

формат даты гггг-мм-дд.

Теперь, как написать следующий запрос, чтобы получить все представленные данные о транзакциях для текущей недели, а также текущего месяца?

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

Можете ли вы предоставить мне какой-либо код или ссылку, с помощью которой я могу решить вышеупомянутую проблему? Если я делаю что-то неправильно, то, пожалуйста, направляйте меня.

ответ

0

Следующий код даст текущую сводку недели:

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

Этот код даст краткие сведения о текущем МЕСЯЦ

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

ИЛИ оба запроса могут быть указаны в течение текущей недели выбранной даты & текущий месяц выбранной даты следующим образом:

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