C# 使用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

我正在使用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();
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中循环列表,并将这些项添加到元组中