从日期时间值中选择日期

时间:2011-04-07 12:39:04

标签: linq-to-sql

我想使用Linq到Sql或sql lambda从DateTime值中选择Date部分。 这是我的情景。

dbContext.PurchaseOrders.Where(r => r.ReqDate == DateTime.Now).ToList();

这里ReqDate是一个DateTime字段。我想今天选择所有采购订单。

7 个答案:

答案 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();