在 DateTime 之后对 IENumerable 进行排序
Sort IENumerable after 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)
};
如何在 "Date" 之后对它进行排序?
您可以使用 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 解析每次。
我有以下
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)
};
如何在 "Date" 之后对它进行排序?
您可以使用 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 解析每次。