2012-05-08 17 views
0

目標: 今日の日付と月に基づいて、XMLから実際の値と次の2日間の値を取得します。日付に基づいて、XMLから今日と今後2日間の値を取得しますか?

問題: 私のc.Attribute( "Day")の値は変更されますが、私のc.Attribute( "Month")の値は変わりません。だから実際の日私は30.04.2012場合は30.04.2012の祈りの時間が表示されますが、01.05.2012と02.05.2012では表示されません。これを解決するには?

また、私はこのDato = c.Attribute("Day").Value + "." + c.Attribute("Month").Value + "." + myDay.Year.ToString(),が良いかどうかわかりません。私はそれが得ているXMLの日付を表示するリストボックスをします。

助けてください。 下のコード、XML、およびクラス。ここで

var filteredData3 = from c in loadedCustomData.Descendants("PrayerTime") 
    where int.Parse(c.Attribute("Day").Value) >= myDay.Day && int.Parse(c.Attribute("Day").Value) < (myDay.Day + 3) 
    && c.Attribute("Month").Value == myDay.Month.ToString() 


     select new Bønn() 
     { 

     Dato = c.Attribute("Day").Value + "." + c.Attribute("Month").Value + "." + myDay.Year.ToString(), 
     Fajr = TimeSpan.Parse(c.Attribute("Fajr").Value), 
     Sunrise = TimeSpan.Parse(c.Attribute("Sunrise").Value), 
     Zohr = TimeSpan.Parse(c.Attribute("Zohr").Value), 
     Asr = TimeSpan.Parse(c.Attribute("Asr").Value), 
     Maghrib = TimeSpan.Parse(c.Attribute("Maghrib").Value), 
     Isha = TimeSpan.Parse(c.Attribute("Isha").Value), 
     Jumma = TimeSpan.Parse(c.Attribute("Jumma").Value), 

     }; 

listBox1.ItemsSource = filteredData3; 

は私のクラスである:ここでは

public class Bønn 
{ 

    public TimeSpan Fajr { get; set; } 
    public TimeSpan Sunrise { get; set; } 
    public TimeSpan Zohr { get; set; } 
    public TimeSpan Asr { get; set; } 
    public TimeSpan Maghrib { get; set; } 
    public TimeSpan Isha { get; set; } 
    public TimeSpan Jumma { get; set; } 

    public string Dato { get; set; } 

} 

は私のXMLです:

<PrayerTime 
     Dag ="30" 
     Måned="4" 
     Fajr="04:09" 
     Sunrise="05:19" 
     Zohr="13:19" 
     Asr="18:30" 
     Maghrib="21:14" 
     Isha="22:24" 

    /> 
    <PrayerTime 
     Dag ="1" 
     Måned="5" 
     Fajr="04:08" 
     Sunrise="05:16" 
     Zohr="13:19" 
     Asr="18:31" 
     Maghrib="21:17" 
     Isha="22:25" 

    /> 
    <PrayerTime 
     Dag ="2" 
     Måned="5" 
     Fajr="04:06" 
     Sunrise="05:13" 
     Zohr="13:19" 
     Asr="18:33" 
     Maghrib="21:19" 
     Isha="22:27" 
    /> 
+0

これは、重複した質問メガですが、私はあなたの古いものをフラグを立て閉鎖のために。将来はあなたの古い質問を修正するか削除するだけです。 –

答えて

3

私は日付のDateTimeの代わりstringを使用するために、あなたの "モデル" クラスを変更することをお勧め。 すべて要素をモデルクラスに変換し、、次にフィルタを変換します。これは、属性に基づいて算術演算を行うよりもずっと簡単になります。

また、XAttributeの明示的な変換を使用すると、どこでもint.Parseを呼び出すよりも簡単です。あなたが書くことができますので、私は実際には、あなたのモデルクラスに静的FromXElementメソッドを作成することをお勧め:

DateTime start = DateTime.Today; 
// We'll use this as an *exclusive* upper bound 
DateTime end = start.AddDays(3); 

var query = from c in loadedCustomData.Descendants("PrayerTime") 
      let bonn = Bønn.FromXElement(c) 
      where bonn.Dato >= start && bonn.Dato < end; 
      select bonn; 

または拡張メソッドの構文で:

// start and end as before 
var query = loadedCustomData.Descendants("PrayerTime") 
       .Select(c => Bønn.FromXElement(c)) 
       .Where(bonn => bonn.Dato >= start && bonn.Dato < end); 
+0

なぜFromXElementの代わりにXElementをとるコンストラクタはありませんか? –

+0

@ChuckSavage:名前付き静的メソッドがコンストラクタよりも読みやすくなることが判明しました。特に、同じパラメータ型を持つ2つのメソッドが必要な場合に便利です。 'TimeSpan.FromHours'と' TimeSpan.FromDays'です。変換のために私は通常、静的な 'FromXyz'メソッドとインスタンス' ToXyz'メソッドを使用します。 –

+0

hmm ..私はC#で本当に基本的なスキルを得て、今は私はテーブルから何も得ていないので、私は立ち往生しています。問題は、私のXMLが年を経ないことです。 1つの曜日の属性と1つの月の1つの属性。それは現在のように機能しますが、月末の問題はあります。また、FromXElementがBonnクラスに見つかりませんでした。 – Megaoctane

関連する問題