我想查询结果
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”,假设“2/17/2014 12:00:00 AM” 因为它是一个datepicker控件,我将它转换为datetime但是我必须比较它的创建日期的值是原始时间假设“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 :(得分: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();
使用实体框架,您应该使用EntityFunctions.TruncateTime(m.PlanDate)
答案 1 :(得分: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();
}
答案 2 :(得分:1)
如果您使用的是EntityFramework 6,则在linq查询中比较日期的推荐方法是DbFunctions.TruncateTime(m.PlanDate)
和以前的版本EntityFunctions.TruncateTime(m.PlanDate)