目标: 根据今天的日期和月份,从XML获取实际值和接下来的两天值。
问题: 虽然我的c.Attribute(“Day”)。值更改,但我的c.Attribute(“Month”)。值保持不变。因此,如果实际的一天我30.04.2012然后它将显示30.04.2012但不是01.05.2012和02.05.2012的prayertimes。怎么解决这个问题?
此外,我不确定这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);