2014-02-17 109 views
4

我要查询的结果比较日期逻辑Linq中

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(); 
} 

但是,根据实际需要“m.PlanDate”在查询中也比较结果的时候不来。 所以在上面的函数参数“CreatedDate”总是会得到“12:00:00 AM”连接到它假设“2014年2月17日12:00:00 AM” ,因为它是一个日期选择器控制,我转换它进入日期时间,但创建日期的值与我必须比较它具有原始时间假设“2/17/2014 11:58:35 AM”

这就是为什么我没有得到所需的结果。

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

我已经搜索了上述问题,它使用AddDays有许多解决方案,如:: (1);但我不确定它的工作。 也我试过了:: http://www.codeproject.com/Articles/499987/LINQ-query-to-compare-only-date-part-of-DateTime

请建议我一个更好的方式来做到这一点,因为这不是我第一次得到这个问题。

+0

的'AddDays'方法是最好的方法,因为当你比较它SQL Server无法使用索引了之前转换数据库值。你是什​​么也不确定? –

回答

7

如果您正在使用LINQ to SQL(如你在问题标签中指定),然后简单地获取日期时间的日期部分:

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

实体框架,你应该使用EntityFunctions.TruncateTime(m.PlanDate)

1

您已经尝试了这个:

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

的推荐方式比较LINQ查询日期,如果您使用的EntityFramework 6 DbFunctions.TruncateTime(m.PlanDate)和以前的版本EntityFunctions.TruncateTime(m.PlanDate)