Linq - 从结果集中获取最大日期

时间:2015-09-16 07:22:49

标签: c# asp.net-mvc linq entity-framework-4

我需要将以下SQL查询转换为Linq: -

 SELECT CODE,SCODE,MAX(SDATE) AS SDATE FROM SHIFTSCHEDULE 
 WHERE COMPANY = 'ABC' 
 GROUP BY CODE,SCODE 
 ORDER BY MAX(SDATE) 
 DESC

到目前为止,我试过这个: -

var data = ctx.ShiftSchedule.Where(m =>
                                    m.Company == company && m.EmployeeId == item.EmployeeId
                                )
                                .GroupBy(m =>
                                    new
                                    {
                                        m.EmployeeId,
                                        m.ShiftId
                                    })
                                .Select(m =>
                                new
                                {
                                    EmployeeId = m.Key.EmployeeId,
                                    ShiftCode = m.Key.ShiftId,
                                    ShiftDate = m.Max(gg => gg.ShiftDate)
                                }).ToList();

我得到的结果是: -

enter image description here

现在我想要的是在此结果集中获取MaxDate的记录或项目。在上图中,MaxDate是第一张唱片。

如何从结果集中获取MAXDATE

2 个答案:

答案 0 :(得分:1)

这应该有效: -

var data = ctx.ShiftSchedule.Where(x => x.Company == company 
                                        && x.EmployeeId == item.EmployeeId)
                            .GroupBy(x => new { x.CODE, x.SCODE })
                            .Select(x => new 
                                        {
                                            CODE = x.Key.CODE,
                                            SCODE = x.Key.SCODE,
                                            SDATE  = x.Max(z => z.SDATE) 
                                        })
                            .OrderByDescending(x => x.SDATE).FirstOrDefault();

您可以使用FirstOrDefault订购生成的集合并获取第一个对象。

如果您只想MAXDATE,则只能投影。

答案 1 :(得分:1)

最后添加.OrderByDescending(x => x.ShiftDate).First();

OrderByDescending日期,然后选择.First()

 var data = ctx.ShiftSchedule.Where(m =>
                                        m.Company == company && m.EmployeeId == item.EmployeeId
                                    )
                                    .GroupBy(m =>
                                        new
                                        {
                                            m.EmployeeId,
                                            m.ShiftId
                                        })
                                    .Select(m =>
                                    new
                                    {
                                        EmployeeId = m.Key.EmployeeId,
                                        ShiftCode = m.Key.ShiftId,
                                        ShiftDate = m.Max(gg => gg.ShiftDate)
                                    }).ToList().OrderByDescending(x => x.ShiftDate).First();