如何使用 LinqToSql 查询特定日期时间

How do I use LinqToSql to query on specific datetime

在特定日期时间使用 Linq2Sql 查询数据库时,查询总是没有结果。我怀疑时间差了纳秒导致了差异。时间必须相等但不相等。如何查询数据库的日期时间,精确到秒?

以下代码有效,但它完全排除了时间部分:

        var Foos = Bars
                .Where(x =>
                    DbFunctions.TruncateTime(x.EndDate) == DbFunctions.TruncateTime(endDate))
                .Select(x => x.Id);

也试过这段代码(不是很漂亮)但是编译器抱怨在 linq 查询中包含 Date。

        var Foo = Bars
                .Where(x => 
                        x.EndDate.Value.Date == endDate.Value.Date &&
                        x.EndDate.Value.Hour == endDate.Value.Hour &&
                        x.EndDate.Value.Minute == endDate.Value.Minute &&
                        x.EndDate.Value.Second == endDate.Value.Second)
                .Select(x => x.Id);

也试过了,但查询总是空的。可能 ToString() 在 Linq 查询中不起作用。

var foo = bars.Where(x => x.EndDate.ToString() == endDate.ToString())

您可以像这样使用 DiffSeconds 方法:

var Foo = Bars
       .Where(x => DbFunctions.DiffSeconds(x.EndDate, endDate) == 0)
       .Select(x => x.Id);

解决方法是分别比较日期部分和小时部分。与其尝试施法,不如分而治之

假设您将数据存储在数据库中,如下所示

Pickup Time :10/9/2015 12:53:15 AM

如果你想比较它当前的系统时间长达几个小时,下面的查询有效

 orddb.order.Where(x.PickupDate.Hour >= DateTime.Today.Hour 
                    && x.PickupDate >= DateTime.Today)