按日期排序仅在LINQ中打印最新20条记录
本文关键字:打印 最新 20条 记录 LINQ 日期 排序 | 更新日期: 2023-09-27 18:27:50
我正在打印所有最新记录,具体取决于书籍的出版时间。(PubEnd
)。现在我可以按降序打印所有出版的书了。
我需要打印最新出版的20本书。我该怎么做
现在,下面的代码正在按降序打印所有出版的书籍。
var query = docs.Descendants(name)
.Select(x => new
{
Title = (string)x.Element(ns + "TITLE"),
Status = (string)x.Element(ns + "STATUS"),
PubEnd = (string)x.Element(ns + "PUB_END")
})
.Select(x => new
{
Title = x.Title,
Status = x.Status,
PubEnd = x.PubEnd,
}).OrderByDescending(x => x.PubEnd).ToList();
foreach (var book in query)
{
if (book.Status == "Published")
{
Response.Write(book.Title);
Response.Write(book.Status);
Response.Write(book.PubEnd);
}
}
使用Take()
:
foreach (var book in query.Take(20))
{
//print
}
如果您总是只需要20相应地更新查询本身:
(..).OrderByDescending(x => x.PubEnd).Take(20).ToList();
您只需要使用Take(20)
这是Take 的文档
您的代码将变为:
...OrderByDescending(x => x.PubEnd).Take(20).ToList()
DISTINCT的更新
这是Distinct 的文档
你的代码是这样的,我想你在采取20之前想要不同的:)
...OrderByDescending(x => x.PubEnd).Distinct().Take(20).ToList()
- 使用
Take(20)
- 为什么要两次构建具有相同值的匿名对象
这应该是你需要的:
var list = docs.Descendants(name)
.Select(x => new
{
Title = (string)x.Element(ns + "TITLE"),
Status = (string)x.Element(ns + "STATUS"),
PubEnd = (string)x.Element(ns + "PUB_END")
})
.OrderByDescending(x => x.PubEnd).Take(20).ToList();
如果您想获得不同的结果:
var list = (...).OrderByDescending(x => x.PubEnd).Distinct().Take(20).ToList();
var query = docs.Descendants(name)
.Select(x => new
{
Title = (string)x.Element(ns + "TITLE"),
Status = (string)x.Element(ns + "STATUS"),
PubEnd = (string)x.Element(ns + "PUB_END")
})
.OrderByDescending(x => x.PubEnd).Take(20); // Take will get the first N records.
foreach (var book in query)
{
if (book.Status == "Published")
{
Response.Write(book.Title);
Response.Write(book.Status);
Response.Write(book.PubEnd);
}
}