我在数据库中有一些不同到期日的人的记录。一个人可以有多个不同截止日期的记录。我必须写一个查询来查找每个决斗日期最低的人的所有记录。当某个特定人的截止日期不同时,我能够编写带有确切结果的查询。如果我有一个具有相同决斗日期的人的多个记录,并且恰好是最低日期,那么查询将为同一个人返回多行。在这种情况下,我应该获得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();
有人能告诉我该如何处理这个查询吗?
感谢
只需按日期和id订购每组,然后从订购组中选择第一个项目:
from at in allActiveTriggers
group at by at.Person into g
select g.OrderBy(at => at.DueDate).ThenBy(at => at.ID).First()