Как запросить отчет за текущую неделю и текущий месяц, используя LINQ to XML? - PullRequest
1 голос
/ 04 января 2011

Я занимаюсь разработкой приложения для Windows Phone 7 в Silverlight. Я новичок в серебряном свете. Я также новичок в LINQ to XML. В моем приложении пользователь выбирает дату и отправляет некоторые детали транзакции в приложение. Детали хранятся в 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));

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

Ответы [ 2 ]

0 голосов
/ 06 января 2011

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

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);
}
0 голосов
/ 04 января 2011

Объект DateTime имеет свойство Month, с помощью которого вы сможете фильтровать по месяцам. В течение недели вы можете использовать GetWeekOfYear в классе Calendar, прочитайте эту ссылку: http://msdn.microsoft.com/en-us/library/system.globalization.calendar.getweekofyear.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...