如何只比较EF中DateTime的日期组件?

c# datetime-comparison entity-framework linq linq-to-entities

我有两个日期值,一个已存储在数据库中,另一个由用户使用DatePicker选择。用例是从数据库中搜索特定日期。

先前在数据库中输入的值始终具有12:00:00的时间分量,其中从选择器输入的日期具有不同的时间分量。

我只对日期组件感兴趣,并且想要忽略时间组件。

在C#中进行这种比较的方法有哪些?

另外,如何在LINQ中执行此操作?

更新:在LINQ to Entities上,以下工作正常。

e => DateTime.Compare(e.FirstDate.Value, SecondDate) >= 0

一般承认的答案

注意:在撰写此答案时,EF关系不清楚(在编写完成后编辑成问题)。要获得EF的正确方法,请检查Mandeeps的答案


您可以使用DateTime.Date属性执行仅日期比较。

DateTime a = GetFirstDate();
DateTime b = GetSecondDate();

if (a.Date.Equals(b.Date))
{
    // the dates are equal
}

热门答案

使用EntityFunctions类修剪时间部分。

using System.Data.Objects;    

var bla = (from log in context.Contacts
           where EntityFunctions.TruncateTime(log.ModifiedDate) ==  EntityFunctions.TruncateTime(today.Date)
           select log).FirstOrDefault();

资料来源: http//social.msdn.microsoft.com/Forums/en-US/csharpgeneral/thread/84d4e18b-7545-419b-9826-53ff1a0e2a62/

UPDATE

由于EF 6.0及更高版本EntityFunctions被替换DbFunctions




许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因
许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因