【问题标题】:Linq - Get Max date from resultsetLinq - 从结果集中获取最大日期
【发布时间】:2015-12-12 15:51:15
【问题描述】:

我需要将以下 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();

我得到的结果是:-

现在我想要在MaxDate 这个结果集中获取记录或项目。在上图中,MaxDate 是第一条记录。

如何从结果集中获取MAXDATE?

【问题讨论】:

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


    【解决方案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,你只能投射它。

    【讨论】:

    • 是OrderBy 还是OrderByDescending?
    • @Anup - 糟糕,应该是OrderByDescending。
    【解决方案2】:

    只需在末尾添加.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();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-27
      • 2020-11-17
      • 2012-11-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-08
      • 2020-02-05
      相关资源
      最近更新 更多