我想使用Linq到Sql或sql lambda从DateTime值中选择Date部分。 这是我的情景。
dbContext.PurchaseOrders.Where(r => r.ReqDate == DateTime.Now).ToList();
这里ReqDate是一个DateTime字段。我想今天选择所有采购订单。
答案 0 :(得分:7)
它就像在Date
中使用DateTime
属性一样简单:
更新:根据评论中的第3个错误,我看到ReqDate
是A Nullable<DateTime>
。尝试使用Value
属性访问基础DateTime
对象:
dbContext.PurchaseOrders.Where(r => r.ReqDate.Value.Date == DateTime.Now.Date)
.ToList();
修改强>
或者,您可以尝试不那么漂亮的选项:
dbContext.PurchaseOrders.Where(r => r.ReqDate.ToString("yyyy-MM-dd") ==
DateTime.Now.ToString("yyyy-MM-dd"))
.ToList();
只需将DateTime
个对象转换为格式化为仅包含日期的字符串。
答案 1 :(得分:3)
我有一个回复列表的答案。我知道很多,但我无法在任何地方找到解决方案。
我希望这可以拯救别人的挫败感。我一直在寻找并寻找这个问题的答案。
它按日期时间执行分组以返回没有时间的日期列表。在我的例子中,它是加载一个日期组合框供选择。
var mADates = from ta in db.AM_Assignments
orderby ta.Assignment_DTM
group ta by ta.Assignment_DTM.Date;
List<DateTime> dtx = new List<DateTime>();
foreach (var dt in mADates)
{
dtx.Add(Convert.ToDateTime(dt.Key.ToShortDateString()));
}
return dtx;
答案 2 :(得分:1)
使用Subtract方法。
dbContext.PurchaseOrders.Where(r => DateTime.Now.Subtract(r.ReqDate).Days == 0).ToList();
答案 3 :(得分:1)
试试这个:
dbContext.PurchaseOrders.Where(r => r.ReqDate.Date == DateTime.Today).ToList();
答案 4 :(得分:1)
。日期创建00:00:00时间,因此不比较时间
dbContext.PurchaseOrders.Where(r => r.ReqDate.Date == DateTime.Now.Date).ToList();
答案 5 :(得分:1)
有一些LINQ2SQL函数模仿本机SQL函数。其中之一 - 从DateTime?
或DateTimeOffset?
截断时间。
var today = DateTime.Now.Date;
dbContext.PurchaseOrders.Where(r => DbFunctions.TruncateTime(r.ReqDate).Value == today).ToList();
答案 6 :(得分:0)
@Angus代码的更紧凑版本
var mADates = from ta in db.AM_Assignments
orderby ta.Assignment_DTM
group ta by ta.Assignment_DTM.Date;
return mADates.Select(dt => Convert.ToDateTime(dt.Key.ToShortDateString())).ToList();