【问题标题】:How to query with the datetime value using LINQ to XML?如何使用 LINQ to XML 查询日期时间值?
【发布时间】:2010-12-31 12:50:13
【问题描述】:

我正在silverlight 中开发window phone 7 应用程序。我是银光新手。我也是 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>

日期格式为 yyyy-mm-dd。

现在我应该如何编写以下查询来获取当天提​​交的所有交易详细信息?

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

同样,我应该如何编写查询以获取当周和当月的所有交易详细信息?您能否提供我可以解决上述问题的任何代码或链接?如果我做错了什么,请指导我。

【问题讨论】:

    标签: c# silverlight datetime windows-phone-7 linq-to-xml


    【解决方案1】:

    不要在 LINQ to XML 中使用 Convert.ToDateTimeToShortDateString 等。使用XAttributeXElement 中已经存在的转换。例如:

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

    (您也应该在 Transaction 构造函数中使用转换运算符。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多