2010-12-31 6 views
1

나는 실버 라이트로 창 전화 7 응용 프로그램을 개발 중입니다. 나는 실버 라이트가 처음이다. 저는 LINQ to XML을 처음 접했습니다. 내 응용 프로그램에서 사용자는 응용 프로그램에 거래 세부 사항을 제출 & 날짜를 선택합니다. 세부 정보는 XML 파일에 저장됩니다. 그런 다음 AppObj.date의 값이 XML 파일에 저장됩니다LINQ to XML을 사용하여 datetime 값을 쿼리하는 방법은 무엇입니까?

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

     } 

을 다음과 같이 나는 날짜 선택 내 응용 프로그램에서 사용자 지정 날짜 컨트롤을 사용하고 있습니다. 때로는 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);   

     } 

트랜잭션 클래스에는 다음 생성자가 포함되어 있습니다. 는 XML 값을 파일에

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

는 날짜 & 시간 동안 저장됩니다. 노드

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

날짜 형식에서

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

봐 YYYY-MM-DD되어 다음과 같이 값이 저장됩니다.

지금 제출 된 거래 내역을 오늘 날짜로 가져 오려면 어떻게해야합니까?

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

마찬가지로 어떻게 현재의 주 & 현재 월에 대한 모든 거래 내역을 얻을 수있는 쿼리를 작성해야합니까? 위의 문제를 해결할 수있는 코드 나 링크를 제공해 주시겠습니까? 내가 틀린 일을하고 있다면 나를 안내 해주십시오.

답변

4

Convert.ToDateTime 또는 ToShortDateString 등을 LINQ to XML과 함께 사용하지 마십시오. 이미 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 생성자에서 변환 연산자를 사용합니다.)

관련 문제