0

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

問題: c.Attribute("Day").Value は変更されますが、c.Attribute("Month").Value は変わりません。したがって、実際の日が 2012 年 4 月 30 日である場合、2012 年 4 月 30 日の祈りの時間は表示されますが、2012 年 5 月 1 日と 2012 年 5 月 2 日は表示されません。これを解決する方法は?

また、これ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" 
    />
4

1 に答える 1

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);
于 2012-05-08T19:29:40.407 に答える