1

Silverlight で Windows 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 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

日付形式は yyyy-mm-dd です。

現在の週と現在の月のすべての送信されたトランザクションの詳細を取得するには、次のクエリをどのように記述すればよいでしょうか?

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

上記の問題を解決できるコードまたはリンクを教えてください。私が何か間違ったことをしているなら、私を導いてください。

4

2 に答える 2

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);
}
于 2011-01-06T08:22:38.357 に答える
0

DateTimeオブジェクトにはプロパティがあり、Month月でフィルタリングできるはずです。クラスで使用できる週についてはGetWeekOfYear、次のCalendarリンクを参照してください: http://msdn.microsoft.com/en-us/library/system.globalization.calendar.getweekofyear.aspx

于 2011-01-04T06:52:39.923 に答える