微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用多个联接和多个选择字段从linq获取最大日期

如何解决使用多个联接和多个选择字段从linq获取最大日期

我一直在为此挠头,找不到解决方法我有一个像这样的数据集,

JobID   DueDate     VisitID
4024082 2020-07-31  5267157
4024082 2020-07-29  5263915
4024082 2020-08-04  5269154
4024082 2020-07-23  5258774
4024082 2020-07-22  5255307

我想要这样的结果集,

JobID   Duedate     VisitID
4024082 2020-08-04  5269154

我尝试了几种方法,但无法使其正常工作。我的linq查询

            var jobs = await (from j in _ctx.Jobs
                              join v in _ctx.Visits on j.JobID equals v.JobID
                              join p in _ctx.Products on j.ProductID equals p.ProductID
                              where j.IsProcessed== true
                              group v by new
                              {
                                  v.JobID,v.VisitID
                              }
                into g
                              select new
                              {
                                  JobId = g.Key,DueDate = g.Max(x => x.DueDate),VisitID = g.Key.VisitID
                              }).ToListAsync();

任何帮助将不胜感激。谢谢

解决方法

您不能使用Max获得多个值。您必须在此处使用排序机制。

下面是一个示例,该示例说明如何将工作按JobID分组,然后将每个最高日期与相应的VisitID分组。

这里是示例。 (我使用LinqPad对此进行了测试):

void Main()
{
    var jobs = new[]
    {
        new Job { JobID = 4024082,DueDate = DateTime.ParseExact("2020-07-31","yyyy-MM-dd",CultureInfo.InvariantCulture),VisitID = 5267157 },new Job { JobID = 4024082,DueDate = DateTime.ParseExact("2020-07-29",VisitID = 5263915 },DueDate = DateTime.ParseExact("2020-08-04",VisitID = 5269154 },DueDate = DateTime.ParseExact("2020-07-23",VisitID = 5258774 },DueDate = DateTime.ParseExact("2020-07-22",VisitID = 5255307 },};
    
    var query = from job in jobs
                group job by job.JobID into grp
                select grp.OrderByDescending(g => g.DueDate).FirstOrDefault();
    
    query.Dump();
}

public class Job
{
    public int JobID { get; set; }
    public DateTime DueDate { get; set; }
    public int VisitID { get; set; }
}

输出:

JobID    DueDate            VisitID
4024082  4-8-2020 00:00:00  5269154 
,

我认为问题在于您在VisitId中使用GroupBy。由于所有VisitId值都是唯一的,因此每组将获得一条记录(因此每条记录将获得一组)。

如果您想从这些样本记录中选择一组,也许只应该加入JobId。然后,要获取具有最新VisitID的行的DueDate,我们可以按DueDate(降序)对组进行排序,并从{{1 }}记录:

VisitID

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。