Вопрос по linq, c# – Исходя из даты, получить сегодняшние и следующие два дня значения из XML?

0

Цель: На основе текущей даты и месяца получите фактические и следующие два дня значения из XML.

Выпуск: Хотя мой атрибут c.Attribute (& quot; Day & quot;). Value изменяется, мой атрибут c.Attribute (& quot; Month & quot;). Остается неизменным. Таким образом, если фактический день я 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 и класс ниже.

<code>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;
</code>

Вот мой класс:

<code>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; }

}
</code>

Вот мой XML:

<code><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" 
    />
</code>
Это повторяющийся вопрос, Мега, я пометил твой старый для закрытия. В будущем вы должны просто пересмотреть свой старый вопрос или удалить его. Chuck Savage

Ваш Ответ

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);
Почему не конструктор, который принимает XElement вместо FromXElement? Chuck Savage
@ Megaoctane: если он не содержит год, просто используйте текущий год, возможно, добавив год, если он выглядит так, как будто элемент для следующего года (на основе месяца / дня). Вам нужно написатьFromXElement метод сам, как я и предлагал - вот куда вы поместите код, который создает новый экземпляр на основеXElement. Похоже, в данный момент вы немного не в себе ... Я бы, конечно, начал с того, чтобы заставить это работать в небольшом консольном приложении, прежде чем помещать его в WP7. Jon Skeet
@ ChuckSavage: я начал находить, что именованные статические методы могут быть более читабельными, чем конструкторы, особенно когда вам могут понадобиться два таких метода с одинаковыми типами параметров, например,TimeSpan.FromHours а такжеTimeSpan.FromDays. Для конверсий я обычно использую staticFromXyz методы и экземплярToXyz методы. Jon Skeet
хмм .. я получил действительно базовые навыки в c #, и теперь я застрял, так как я ничего не получаю из таблицы. Проблема в том, что мой XML не связался с годом. Один атрибут для дня и один атрибут для месяца. И это работает, как сейчас, но с проблемами в конце месяца. Также говорится, что FromXElement не найден в классе Бонн ... Megaoctane

Похожие вопросы