如何获得在linq中具有最大日期的数据

本文关键字:日期 数据 何获得 linq | 更新日期: 2023-09-27 18:05:37

这是一个linq查询,表"Timesheet_Log"具有DateTime类型的DT_CR列,我想获得最新DT_CR日期的查询,这是如何可能的?

  var getEmployeeNames = (from emps in reslandentity.EMPLOYEE
                                join timesheet in reslandentity.TIMESHEET on emps.ID equals timesheet.RES_ID
                                join weekcal in reslandentity.WEEK_CALENDER on timesheet.WEEK_CAL_ID equals weekcal.ID
                                join log in reslandentity.TIMESHEET_LOG on timesheet.ID equals log.TIMESHEET_ID
                                join workflow in reslandentity.TIMESHEET_WORKFLOW on log.WORKFLOW_ID equals workflow.ID                                    
                                where weekcal.WEEK_START_DT.Month == month                                    
                                orderby log.DT_CR select new TimesheetModel
                                {
                                    EMP_ID = emps.ID,
                                    EMPLOYEE_NAME = emps.FIRST_NAME + " " + emps.LAST_NAME,
                                    RES_TYPE = workflow.ORG_RES_TYPE,
                                    EMP_STATUS = workflow.ACTION,
                                    SDate = weekcal.WEEK_START_DT,
                                    EDate = weekcal.WEEK_END_DT,
                                    DT_CR=log.DT_CR
                                }).Distinct().ToList();
   model.GetTimeSheetDetails = getEmployeeNames;

Please Help me to get the Query.

如何获得在linq中具有最大日期的数据

你还没有说清楚你是希望得到一个结果还是一个结果列表(每个时间表一个结果)。

如果你只需要一个单一的结果,答案是由lti Tyangi将很好。

如果您需要每个时间表的结果,您可以尝试以下操作:

var getEmployeeNames = (from emps in reslandentity.EMPLOYEE
                            join timesheet in reslandentity.TIMESHEET on emps.ID equals timesheet.RES_ID
                            join weekcal in reslandentity.WEEK_CALENDER on timesheet.WEEK_CAL_ID equals weekcal.ID
                            join mxLog in (
                                from lg in reslandentity.TIMESHEET_LOG
                                group lg by lg.TIMESHEET_ID into lgGrp
                                select new {lgGrp.Key, DT_CR = lgGrp.Max(x => x.DT_CR)}
                            ) on timesheet.ID equals mxLog.Key
                            join log in reslandentity.TIMESHEET_LOG on new { a = mxLog.Key, b = mxLog.DT_CR} equals new{ a = log.TIMESHEET_ID, b = log.DT_CR}
                            join workflow in reslandentity.TIMESHEET_WORKFLOW on log.WORKFLOW_ID equals workflow.ID                                    
                            where weekcal.WEEK_START_DT.Month == month                                    
                            orderby log.DT_CR select new TimesheetModel
                            {
                                EMP_ID = emps.ID,
                                EMPLOYEE_NAME = emps.FIRST_NAME + " " + emps.LAST_NAME,
                                RES_TYPE = workflow.ORG_RES_TYPE,
                                EMP_STATUS = workflow.ACTION,
                                SDate = weekcal.WEEK_START_DT,
                                EDate = weekcal.WEEK_END_DT,
                                DT_CR=log.DT_CR
                            }).Distinct().ToList();
   model.GetTimeSheetDetails = getEmployeeNames;

在这里,我们连接到每个时间表的日志分组,以获得每个时间表的最大日期,然后根据时间表的id和日期

连接到日志
 var getEmployeeNames = (from emps in reslandentity.EMPLOYEE
                            join timesheet in reslandentity.TIMESHEET on emps.ID equals timesheet.RES_ID
                            join weekcal in reslandentity.WEEK_CALENDER on timesheet.WEEK_CAL_ID equals weekcal.ID
                            join log in reslandentity.TIMESHEET_LOG on timesheet.ID equals log.TIMESHEET_ID
                            join workflow in reslandentity.TIMESHEET_WORKFLOW on log.WORKFLOW_ID equals workflow.ID                                    
                            where weekcal.WEEK_START_DT.Month == month                                    
                            //orderby log.DT_CR 
                            select new TimesheetModel
                            {
                                EMP_ID = emps.ID,
                                EMPLOYEE_NAME = emps.FIRST_NAME + " " + emps.LAST_NAME,
                                RES_TYPE = workflow.ORG_RES_TYPE,
                                EMP_STATUS = workflow.ACTION,
                                SDate = weekcal.WEEK_START_DT,
                                EDate = weekcal.WEEK_END_DT,
                                DT_CR=log.DT_CR
                            }).OrderByDescending(x=>x.DT_CR).FirstorDefault();

 var getEmployeeNames = (from emps in reslandentity.EMPLOYEE
                            join timesheet in reslandentity.TIMESHEET on emps.ID equals timesheet.RES_ID
                            join weekcal in reslandentity.WEEK_CALENDER on timesheet.WEEK_CAL_ID equals weekcal.ID
                            join log in reslandentity.TIMESHEET_LOG on timesheet.ID equals log.TIMESHEET_ID
                            join workflow in reslandentity.TIMESHEET_WORKFLOW on log.WORKFLOW_ID equals workflow.ID                                    
                            where weekcal.WEEK_START_DT.Month == month                                    
                            //orderby log.DT_CR 
                            select new TimesheetModel
                            {
                                EMP_ID = emps.ID,
                                EMPLOYEE_NAME = emps.FIRST_NAME + " " + emps.LAST_NAME,
                                RES_TYPE = workflow.ORG_RES_TYPE,
                                EMP_STATUS = workflow.ACTION,
                                SDate = weekcal.WEEK_START_DT,
                                EDate = weekcal.WEEK_END_DT,
                                DT_CR=log.DT_CR
                            }).OrderByDescending(x=>x.DT_CR).ToList().Take(1);