2011-10-07 79 views
3

在LINQ to SQL中,如何仅比较sql datetime列和.net datetime对象的日期部分?在LINQ中比较日期部分

+2

我知道EF不支持这种转换,但LINQ to SQL的支持可能使用的日期时间的'.Date'属性进行比较。 - 只是检查,它确实。链接张贴在我的答案。 – tvanfosson

+0

在EF中,您可以使用[EntityFunctions.TruncateTime](http://msdn.microsoft.com/zh-cn/library/dd395596.aspx)。见http://stackoverflow.com/questions/4188066/linq-to-entities-group-by-failure-using-date –

回答

3

尝试同时使用的Date属性:

Date today = DateTime.Today; // Effectively DateTime.Now.Date 

var dataFromToday = from record in context.Records 
        where record.TimeStamp.Date == today 
        select record; 

相信这个工程的LINQ to SQL ...为tvanfosson说,它并不适用于EF。

+0

我知道它没有。那是我昨天的事。 – tvanfosson

+0

@tvanfosson:正式做出更强调:) –

+1

也是一个真正的痛苦,因为我通常嘲笑单元测试的数据上下文,它确实与LINQ一起工作(明显)。我必须记住,在开发单元测试的存储库时,可能会说谎。 – tvanfosson

1

Linq to SQL支持将Date属性转换为SQL以进行比较等。有关支持选项的更多信息,请参见MSDN

0

你可以创建一个CLR UDF来做日期比较,然后在你的linq中将它引用到sql linq查询中。

0
using System.Data.Objects.SqlClient; //Don't forget this!! 

//You can access to SQL DatePart function using something like this: 

YourTable.Select(t => new { DayOfWeek = SqlFunctions.DatePart("weekday", t.dateTimeField) - 1 }); //Zero based in SQL 

//You can compare to SQL DatePart function using something like this: 

DateTime dateToCompare = DateTime.Today; 
YourTable.Where(t => SqlFunctions.DatePart("weekday", t.dateTimeField) - 1 == dateToCompare }); //Zero based in SQL 
0
using System.Data.Entity; 

DbFunctions.TruncateTime(u.BirthDate) = DbFunctions.TruncateTime(someDate)