比较Linq中的日期逻辑

Swe*_*tie 4 c# linq sql-server-2005 linq-to-sql

我想查询结果

public resultType GetData(int ClientID, DateTime CreatedDate)
{
    var Row = DB.tblPlans
                .Where(m => m.fkClient_Id == ClientID && m.PlanDate <= CreatedDate)
                .OrderByDescending(m => m.Id)
                .FirstOrDefault();
}
Run Code Online (Sandbox Code Playgroud)

但结果并非如所需,因为查询中的"m.PlanDate"也在比较时间.所以上面函数中的参数"CreatedDate"将始终得到"12:00:00 AM",假设"2/17/2014 12:00:00 AM",因为它是一个datepicker控件,我将其转换为datetime但是我必须比较的创建日期的值是原始时间假设"2/17/2014 11:58:35 AM"

这就是为什么我没有得到理想的结果.

我认为如果时间部分被删除,结果将会很好.

我搜索了上面的问题,它有很多解决方案,比如:: using AddDays(1); 但我不确定它是否有效.我也试过:: http://www.codeproject.com/Articles/499987/LINQ-query-to-compare-only-date-part-of-DateTime

请建议我更好的方法,因为这不是我第一次遇到这个问题.

Ser*_*kiy 7

如果您正在使用Linq to SQL(如您在问题标签中指定的那样),那么只需获取DateTime的Date部分:

var Row = DB.tblPlans
            .Where(m => m.fkClient_Id == ClientID && m.PlanDate.Date <= CreatedDate)
            .OrderByDescending(m => m.Id)
            .FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)

使用Entity Framework,您应该使用 EntityFunctions.TruncateTime(m.PlanDate)