2016-01-18 2 views
0

У меня есть следующиеСортировать IEnumerable после DateTime

var path = HttpContext.Current.Server.MapPath("~/App_Data/WorldNews.xml"); 
     var feedXml = XDocument.Load(path); 


     IEnumerable<NewsItem> feeds = from feed in feedXml.Descendants("item") 
        select new NewsItem 
        { 
         Title = feed.Element("title").Value, 
         Link = feed.Element("link").Value, 
         Description = Regex.Match(feed.Element("description").Value, @"^.{1,180}\b(?<!\s)").Value, 
         Date = Convert.ToDateTime(feed.Element("pubDate").Value) 

        }; 

Как я могу разобраться в этом после того, как «Дата»?

ответ

1

Чтобы сохранить преобразованные даты, вы можете использовать let.

IEnumerable<NewsItem> feeds = 
    from feed in feedXml.Descendants("item") 
    let date = Convert.ToDateTime(feed.Element("pubDate").Value) 
    orderby date 
    select new NewsItem 
    { 
     Title = feed.Element("title").Value, 
     Link = feed.Element("link").Value, 
     Description = Regex.Match(feed.Element("description").Value, @"^.{1,180}\b(?<!\s)").Value, 
     Date = date 
    }; 

Для его сортировки после создания, вы можете сделать это.

feeds = feeds.OrderBy(f => f.Link).ToArray(); 

Причина я добавил .ToArray(), что без него, вы будете инстанцировании цепочку запросов, каждый из которых становится все более и более дорогим для расчета, и восходит к XML разбора каждый раз.

+0

Я бы очень хотел его отсортировать после определения. Потому что я не хочу сортировать и другие параметры. –

+0

@SimonSondrupKristensen: Я добавил некоторую информацию об этом. – recursive

+0

Большое спасибо. Другой вопрос noob: как я могу сортировать это противоположным образом: feeds = feeds.OrderBy (f => f.Date) .ToArray(); ? –

Смежные вопросы