我在数据库中为不同截止日期的人提供了一些记录。一个人可以拥有多个具有不同截止日期的记录。我必须编写一个查询来查找具有最低duedate的每个人的所有记录。当特定人的截止日期不同时,我能够使用确切的结果编写查询。如果我对具有相同duedate的人有多个记录,并且如果恰好是最低日期,那么查询将为同一个人返回多行。在这种情况下,我应该获得具有最低ID的记录(ID是记录表中的整数和主键)。 DueDate是一个纯日期字段,它不包含时间部分。
除上述场景外,以下查询工作正常。 allActiveTriggers是一组记录。我使用另一个查询来获取此集合。
var activeDistinct = (from at in allActiveTriggers
group at by at.Person into dt
let date = dt.Min(d => d.DueDate)
from t in dt
where t.DueDate == date
select t).ToList();
有人可以告诉我该怎么做这个查询吗?
由于
答案 0 :(得分:1)
只需按日期和按ID排序每个组,然后从有序组中选择第一项:
from at in allActiveTriggers
group at by at.Person into g
select g.OrderBy(at => at.DueDate).ThenBy(at => at.ID).First()