C# 使用linq在linq查询中查找最小值(日期)
我正在使用linq提取数据。此数据包含日期和一些其他值。我发现这些日期可以出现多次,因为这些日期可以有相同的值,但时间戳不同。我想提取具有最早时间戳的匿名类型。在林克我该怎么做 这是我的代码:C# 使用linq在linq查询中查找最小值(日期),c#,.net,linq,C#,.net,Linq,我正在使用linq提取数据。此数据包含日期和一些其他值。我发现这些日期可以出现多次,因为这些日期可以有相同的值,但时间戳不同。我想提取具有最早时间戳的匿名类型。在林克我该怎么做 这是我的代码: var result = (from a in UnitOfWork.ActivityLessonParticipantService.Query .Where(a => a.ActivityLesson.Activity.Id == activit
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();
var result=(来自UnitOfWork.ActivitysnParticPantService.Query中的
.其中(a=>a.ActivityLesson.Activity.Id==activityId)
其中(a=>a.ActivityLesson.From>=startDate&&(a.ActivityLesson.To==startDate | | a.ActivityLesson.To d.ActivityLesson.From)
其中!a.ActivityLesson.IsDeleted&!a.ActivityLesson.Activity.IsDeleted&&a.出现==true
选择新的
{
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();
var query=来自UnitOfWork.ActivitysnParticPantService.query中的
其中a.ActivityLesson.Activity.Id==activityId
&&a.ActivityLesson.From>=起始日期
&&(a.ActivityLesson.To==开始日期| | a.ActivityLesson.To a.ActivityLesson.From.Date)
.Select(grp=>grp.OrderBy(a=>a.ActivityLesson.From).First())
.OrderBy(a=>a.User.UserName)
.选择(a=>新建
{
CPR=a.User.UserName,
FullName=a.User.FullName,
ActivityFromDate=a.ActivityLesson.From,
}).ToList();
由于LINQ的延迟执行,这实际上是在最后的
ToList
执行的单个查询。我混合了查询和方法语法,因为在GroupBy
方面,我更喜欢方法语法,但这是一个品味问题。您可以GroupBy
DateTime和t的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();
var query=来自UnitOfWork.ActivitysnParticPantService.query中的
其中a.ActivityLesson.Activity.Id==activityId
&&a.ActivityLesson.From>=起始日期
&&(a.ActivityLesson.To==开始日期| | a.ActivityLesson.To a.ActivityLesson.From.Date)
.Select(grp=>grp.OrderBy(a=>a.ActivityLesson.From).First())
.OrderBy(a=>a.User.UserName)
.选择(a=>新建
{
CPR=a.User.UserName,
FullName=a.User.FullName,
ActivityFromDate=a.ActivityLesson.From,
}).ToList();
由于LINQ的延迟执行,这实际上是一个在最后的
ToList
执行的单一查询。我混合了查询和方法语法,因为在GroupBy
中我更喜欢方法语法,但这是一个品味问题。我对LINQ不熟悉。这会给我每个“行”中的第一项吗从我的框架中获取?您只想提取声明的日期还是您正在选择的匿名类型?首先对列表进行排序,然后使用FirstOrDefaultjust更新问题..我想提取具有最早时间戳的匿名类型。因为我正在foreach中循环列表,并将这些项添加到tuplei中。我是linq.wo的新手uld为我提供每行中的第一个项目从我的框架中获取?您只想提取声明的日期还是选择的匿名类型?首先对列表排序,然后使用FirstOrDefaultjust更新问题..我想提取具有最早时间戳的匿名类型。因为我正在foreach中循环列表,并将这些项添加到元组中