данные не упорядочены по дате - PullRequest
1 голос
/ 19 мая 2010

Невозможно получить список, отсортированный по дате. Как показать данные, упорядоченные по дате?

XDocument doc = XDocument.Load(Server.MapPath("file.xml"));
IEnumerable<XElement> items = from item in doc.Descendants("item")
                                      orderby Convert.ToDateTime(item.Attribute("lastChanges").Value) descending
                                      where item.Attribute("x").Value == 1
                                      select item;

        Repeater1.DataSource = items;
        Repeater1.DataBind();

XML-файл выглядит так:

<root>
  <items>
    <item id="1" lastChanges="15-05-2010" x="0" />
    <item id="2" lastChanges="16-05-2010" x="1" />
    <item id="3" lastChanges="17-05-2010" x="1" />
  </items>
</root>

Ответы [ 2 ]

1 голос
/ 23 мая 2010

Мне пришлось внести пару изменений, чтобы пример кода компилировался и сортировался по желанию:

var formatter = new DateTimeFormatInfo
    {
        ShortDatePattern = "dd/MM/yyyy"
    };
var items = from item in doc.Descendants("item")
            orderby Convert.ToDateTime(item.Attribute("lastChanges").Value, formatter) descending
            where item.Attribute("x").Value == "1"
            select item;

Главное было предоставить IFormatProvider, чтобы система могла правильно анализировать даты.

Выход:

<item id="3" lastChanges="17-05-2010" x="1" />
<item id="2" lastChanges="16-05-2010" x="1" />

Если вы разделяете задачу фильтрации и упорядочения данных в тестируемый класс, вы должны быть в состоянии проверить правильность упорядочения и сосредоточить поиск проблем в другом месте.

public class DataSource
{
    private readonly XDocument _doc;

    public DataSource(XDocument doc)
    {
        _doc = doc;
    }

    public IEnumerable<XElement> GetSortedFilteredElements()
    {
        var formatter = new DateTimeFormatInfo
            {
                ShortDatePattern = "dd/MM/yyyy"
            };
        var items = from item in _doc.Descendants("item")
                    orderby Convert.ToDateTime(item.Attribute("lastChanges").Value, formatter) descending
                    where item.Attribute("x").Value == "1"
                    select item;
        return items;
    }
}

использование:

Repeater1.DataSource =
  new DataSource(XDocument.Load(Server.MapPath("file.xml")))
    .GetSortedFilteredElements();

Следующее, на что нужно обратить внимание, было бы, как подсказал @ david-b, будет ли Repeater переупорядочивать входы, потому что строковые значения XmlNode определенно будут выходить в другом порядке, если будут отсортированы как строки.

0 голосов
/ 19 мая 2010
Repeater1.DataBind(); 

Возможно, в вашем элементе управления пользовательским интерфейсом задано что-то еще?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...