Как сделать запрос со значением datetime, используя LINQ to XML? - PullRequest
1 голос
/ 31 декабря 2010

Я занимаюсь разработкой приложения для 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 void GetTransactionObjects(String strXMLFile, DateTime VDateTime)
        {            
            XDocument doc = null;
            XMLFileManager XMLDocObj = new XMLFileManager();
            doc = XMLDocObj.LoadXMLFile(strXMLFile);
            var vTransaction = from s in doc.Descendants("Transaction")
                               .Where(x => x.Element("Current_Date").Value == VDateTime.ToShortDateString())
                               select new Transaction(s);
            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("InputTypeMethod_ID").Value.ToString());
            Current_Date = Convert.ToDateTime(xElement.Element("Current_Date").Value.ToString());
        }

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

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

<Current_Date>2010-12-31T18:08:23.433+05:30</Current_Date>

Формат даты: гггг-мм-дд.

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

var vTransaction = from s in doc.Descendants("Transaction")
                                   .Where(x => x.Element("Current_Date").Value == VDateTime.ToShortDateString())
                                   select new Transaction(s); 

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

1 Ответ

4 голосов
/ 31 декабря 2010

Не используйте Convert.ToDateTime или ToShortDateString и т. Д. С LINQ to XML.Используйте преобразования, которые уже существуют в XAttribute и XElement.Например:

DateTime today = DateTime.Today;
var query = doc.Descendants("Transaction")
               .Where(x => ((DateTime) x.Element("Current_Date")).Date == today)
               .Select(x => new Transaction(s));

(Вы также должны использовать оператор преобразования в конструкторе Transaction.)

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