Linq语句返回null

时间:2011-02-22 13:13:41

标签: c# linq

我有以下声明

    EmployeeLog objEmpployeeLog = 
             lstEmployeeLog.Where(x => x.EmpId == iEmpId 
                    && x.InDateTime.Value == lastCheckInDate 
                    && x.OutDateTime == null).FirstOrDefault();

lstEmpAttnLog是一个List,我知道它包含具有EmpId的对象,InDateTime等于传递的参数且OutDateTime为null。我使用断点看到了这些值。

我很惊讶为什么它没有返回值。

请帮助,我无能为力,请猜猜可能出现的问题。

3 个答案:

答案 0 :(得分:3)

我的猜测是x.InDateTime.ValuelastCheckInDate之间的微小差异(秒,毫秒等)。尝试将它们四舍五入到预先确定的精确度。

答案 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