使用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插入什么。日期是最早的
感谢
您可以使用OrderBy
或OrderByDescending()
在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();
这稍微取决于techLinks
的GetItems()
的作用,但类似的功能应该有效:
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();