按日期排序仅在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);
    }
}

按日期排序仅在LINQ中打印最新20条记录

使用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()
  1. 使用Take(20)
  2. 为什么要两次构建具有相同值的匿名对象

这应该是你需要的:

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