如何在忽略DateTime属性的Time部分的情况下选择Linq by Date的项目?

时间:2012-08-14 14:39:34

标签: c# .net linq entity-framework

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

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

所以我想选择2012年10月8日任何时间发生的任何条目。

4 个答案:

答案 0 :(得分: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);

答案 1 :(得分:2)

 entries.Where( e => e.Property.Date == new DateTime( 2012, 08, 10 ) )

答案 2 :(得分:2)

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

entries.Where(e => e.Property.Date >= new DateTime(2012, 08, 10) 
                   && e.Property.Date < new DateTime(2012, 08, 11));

答案 3 :(得分:1)

如何使用EntityFunctions.TruncateTime(EF 6以上)

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

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