使用linq在linq查询中查找MIN(日期)
本文关键字:linq 日期 MIN 查询 使用 查找 | 更新日期: 2023-09-27 18:26:34
我正在使用linq来提取数据。此数据包含一个日期和一些其他值。问题是,这些日期可以多次出现,因为这些日期可以具有相同的值,但时间戳不同。我想提取具有最早时间戳的匿名类型。我怎么能在林克做到这一点?
这是我的代码:
var result = (from a in UnitOfWork.ActivityLessonParticipantService.Query
.Where(a => a.ActivityLesson.Activity.Id == activityId)
.Where(a => a.ActivityLesson.From >= startDate && (a.ActivityLesson.To == startDate || a.ActivityLesson.To <= endDate)).OrderBy(d => d.ActivityLesson.From)
where !a.ActivityLesson.IsDeleted && !a.ActivityLesson.Activity.IsDeleted && a.Appeared == true
select new
{
CPR = a.User.UserName,
FullName = a.User.FullName,
ActivityFromDate = a.ActivityLesson.From,
}).OrderBy(c => c.CPR).ToList();
感谢
您可以GroupBy
DateTime
的Date
属性,然后按DateTime
对该组进行排序,并使用First
仅拾取第一条记录/对象:
var query = from a in UnitOfWork.ActivityLessonParticipantService.Query
where a.ActivityLesson.Activity.Id == activityId
&& a.ActivityLesson.From >= startDate
&& (a.ActivityLesson.To == startDate || a.ActivityLesson.To <= endDate)
&& !a.ActivityLesson.IsDeleted
&& !a.ActivityLesson.Activity.IsDeleted
&& a.Appeared
select a;
var firstByDate = query.GroupBy(a => a.ActivityLesson.From.Date)
.Select(grp => grp.OrderBy(a => a.ActivityLesson.From).First())
.OrderBy(a => a.User.UserName)
.Select(a => new
{
CPR = a.User.UserName,
FullName = a.User.FullName,
ActivityFromDate = a.ActivityLesson.From,
}).ToList();
由于LINQ的延迟执行,这实际上是在最终ToList
执行的单个查询。我将查询语法和方法语法混合在一起,因为当涉及到GroupBy
时,我更喜欢方法语法,但这是一个品味问题。