Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何获取linq中具有最大日期的数据_C#_Sql_Linq - Fatal编程技术网

C# 如何获取linq中具有最大日期的数据

C# 如何获取linq中具有最大日期的数据,c#,sql,linq,C#,Sql,Linq,这是一个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

这是一个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;
请帮我查询一下

 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();


您还没有明确表示您只期望一个结果还是一个结果列表(每个时间表1个)

如果您只需要一个结果,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和该日期加入到日志中

您想要具有最新日期的单个模型吗?如果您想要模型列表,那么请指定您想要选择它们的条件。我应该以Max(DT_CR)的形式获取数据,但我研究了如何写入。对不起,我不明白您想要获取什么。查询中没有分组-要从哪些数据中选择最大日期?使用ToList(),是否需要从所有记录中以单个记录的形式获取最大日期?然后在where条件中获取最大范围后使用FirstOrDefault(),或者使用max,例如var q=(从context.Tablename where…)中的n开始)。选择(x=>x.nameofcolumn.max();你有一个订单。然后,您可以使用
.Take(1)
(不确定如何用非方法语法编写)从有序列表中获取第一项。您可能希望按降序获取最大日期。获取错误,如“LINQ to Entities中不支持指定的类型成员'DT_CR'。只支持初始值设定项、实体成员和实体导航属性。”您的答案中有一个输入错误。在这两种情况下,您都意外地将select以及原始订单注释掉了。谢谢Chris,@sanjay:我希望您一定没有复制相同的内容(注释了select)。谢谢@James S,linq有复杂的行为,它以不同的方式进行分组
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;