Linq 语句返回 null

发布于 2024-10-18 16:59:12 字数 422 浏览 0 评论 0原文

我有以下语句

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

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

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

请帮忙,我一无所知,请猜猜可能出了什么问题。

I have following statement

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

lstEmpAttnLog is a List, i know it contains the object which has EmpId, InDateTime equal to the argument passed and OutDateTime is null. I saw these values using breakpoint.

I am surprised why it doesn't return the value.

Please help, i am clueless, please guess what could might have gone wrong.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

我只土不豪 2024-10-25 16:59:12

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

My guess would be small difference (seconds, millis,etc) between x.InDateTime.Value and lastCheckInDate. Try rounding them off to some pre-determined precision.

十年九夏 2024-10-25 16:59:12

如果没有找到这样的元素,FirstOrDefault 返回 null
因此,您的查询不匹配任何项目。

正如 Marc 指出的那样,也许您的日期在秒或毫秒上不匹配。
您可以修改查询以查看特定的精度:

var epsilon = TimeSpan.FromSeconds(1.0);
var logItem = employeeLog.Where(x => x.EmpId == empId 
    && (x.InDateTime.Value - lastCheckInDate) < epsilon
    && x.OutDateTime == null).FirstOrDefault();

请不要使用 Systems Hungarian 在 C# 代码中!这绝对没有意义,因为 C# 具有强大的类型系统,而 Visual Studio 是一个高级 IDE。

FirstOrDefault returns null if no such element is found.
Therefore, you query doesn't match any item.

As Marc pointed out, perhaps your dates don't match in seconds or milliseconds.
You can modify query to look with specific precision:

var epsilon = TimeSpan.FromSeconds(1.0);
var logItem = employeeLog.Where(x => x.EmpId == empId 
    && (x.InDateTime.Value - lastCheckInDate) < epsilon
    && x.OutDateTime == null).FirstOrDefault();

And please, don't use Systems Hungarian in C# code! It's absolutely pointless, seeing that C# has strong type system and Visual Studio is an advanced IDE.

诗酒趁年少 2024-10-25 16:59:12

我假设您正在为 OutDateTime 使用可为 null 的 DateTime 值,如果您将

x.OUTDateTime == null 更改为 !x.OutDateTime.HasValue

I am assuming you are using a nullable DateTime value for OutDateTime, if you are change

x.OUtDateTime == null to !x.OutDateTime.HasValue

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文