如何解决使用多个联接和多个选择字段从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
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 举报,一经查实,本站将立刻删除。