我有以下声明
EmployeeLog objEmpployeeLog =
lstEmployeeLog.Where(x => x.EmpId == iEmpId
&& x.InDateTime.Value == lastCheckInDate
&& x.OutDateTime == null).FirstOrDefault();
lstEmpAttnLog是一个List,我知道它包含具有EmpId的对象,InDateTime等于传递的参数且OutDateTime为null。我使用断点看到了这些值。
我很惊讶为什么它没有返回值。
请帮助,我无能为力,请猜猜可能出现的问题。
答案 0 :(得分:3)
我的猜测是x.InDateTime.Value
和lastCheckInDate
之间的微小差异(秒,毫秒等)。尝试将它们四舍五入到预先确定的精确度。
答案 1 :(得分:2)
FirstOrDefault
会返回null
因此,您查询与任何项目都不匹配。
正如马克所指出的,也许你的日期在几秒或几毫秒内不匹配 您可以修改查询以使用特定的精度查看:
var epsilon = TimeSpan.FromSeconds(1.0);
var logItem = employeeLog.Where(x => x.EmpId == empId
&& (x.InDateTime.Value - lastCheckInDate) < epsilon
&& x.OutDateTime == null).FirstOrDefault();
请不要在C#代码中使用Systems Hungarian!看到C#具有强大的类型系统而Visual Studio是一个高级IDE,这绝对没有意义。
答案 2 :(得分:0)
我假设你正在为OutDateTime使用可以为空的DateTime值,如果你正在改变
x.OUtDateTime == null to!x.OutDateTime.HasValue