使用linq/lambda选择最早日期

本文关键字:日期 选择 lambda linq 使用 | 更新日期: 2023-09-27 18:25:19

我有以下表达式

 var list = techlinks.GetItems().Where(p =>  p.Status == 1).ToList();

我想更改此项,以便选择最早的日期值,例如

 var list = techlinks.GetItems().Where(p =>p.Date is earliest && p.Status == 1).ToList();

请让我知道为p插入什么。日期是最早的

感谢

使用linq/lambda选择最早日期

您可以使用OrderByOrderByDescending()在Date上按以下方式对它们进行排序:

var list = techlinks.GetItems()
                    .Where(p => p.Status == 1)
                    .OrderBy(x=>x.Date).First(); // this will give oldest date

和:

var list = techlinks.GetItems()
                    .Where(p => p.Status == 1)
                    .OrderByDescending(x=>x.Date).First(); // this will give latest date

这是另一种方法。

var list=techlinks.GetItems()
                  .Where(p=> p.Status==1)
                    .Min(d => d.Date)
                      .Single();

如果可能有多个项目都具有最早日期:

var list = techlinks.GetItems()
    .Where(p => p.Status == 1)
    .OrderBy(x=>x.Date)
    .GroupBy(x => x.Date)
    .First()
    .ToList()
Student student = _context.Set<Student>()
          .Where(p => p.StudentID == ID.Value)
          .OrderBy(p => p.AddedDate)
          .FirstOrDefault();

这稍微取决于techLinksGetItems()的作用,但类似的功能应该有效:

var list = techlinks.GetItems().Where(p => p.Date == techlinks.GetItems().Min(x => x.Date) && p.Status == 1).ToList();

如果GetItems()方法真的命中了数据库,您可以先存储其结果,然后使用两次:

var allItems = techLinks.GetItems();
var list = allItems.Where(p => p.Date == allItems.Min(x => x.Date) && p.Status == 1).ToList();

如果你只想要1,你可以使用

techlinks.GetItems().Where(p => p.Status == 1).OrderBy(c => c.Date).FirstOrDefault();

否则我会把它分解成两个陈述

var date = techlinks.Min(c=>c.Date);
techlinks.GetItems().Where(p => p.Status == 1 && c.Date == date).ToList();

也要注意你的日期是如何插入的,DateTime。现在将添加时间组件,所以可能需要做一些像这样棘手的事情

techlinks.GetItems().Where(p => p.Status == 1 && c.Date.Year == date.Year && c.Date.Month == date.Month && c.Date.Day == date.Day).ToList();