8

我有一个带有 DateTime 参数的对象列表。

我想使用 LINQ 查询此列表并按日期返回条目,但忽略时间部分

因此,我想选择 2012 年 8 月 10 日任何时候出现的任何条目。

4

4 回答 4

8

您可以将此代码段用于内存查询:

var theDate = new DateTime(2012, 08, 10);
var entriesOnTheDate = list.Where(item => item.DateTimeField.Date.Equals(theDate));

对于 SQL Server 数据源的查询,您可以使用SqlFunctions.DatePart提取日、月和年,并分别进行比较。

var entriesOnTheDate = dbContext
    .EntriesWithDateTimeField
    .Where(item => SqlFunctions.DatePart("Year", item.DateTimeField) == 2012
                && SqlFunctions.DatePart("Month", item.DateTimeField) == 8
                && SqlFunctions.DatePart("Day", item.DateTimeField) == 12);
于 2012-08-14T14:42:34.380 回答
2

您可以添加涵盖一整天的时间范围:

entries.Where(e => e.Property.Date >= new DateTime(2012, 08, 10) 
                   && e.Property.Date < new DateTime(2012, 08, 11));
于 2012-08-14T14:44:48.380 回答
2
 entries.Where( e => e.Property.Date == new DateTime( 2012, 08, 10 ) )
于 2012-08-14T14:42:45.240 回答
1

使用 EntityFunctions.TruncateTime 怎么样(从 EF 6 开始)

var result = context.Employees
.Where(x => EntityFunctions.TruncateTime(x.LoginDate) ==DateTime.Today)
.FirstOrDefault();

命名空间:System.Data.Objects.EntityFunctions.TruncateTime

于 2015-06-01T12:15:29.237 回答