Linq to SQL DateTime2查询

时间:2011-05-08 14:52:20

标签: c# linq-to-sql sql-server-2008

我有一个带有datetime2字段的表,我需要从今天的日期中获取所有行。相当奇怪(在我看来,但我确信这是有正当理由的),如果我这样做:

MyTable.Where(t => t.Date == DateTime.Today).ToList()

即使有今天的日期,它也不会返回任何内容。

我在这里缺少什么?我认为datetime2允许你这样查询而不是必须使用大于和小于指定时间帧?

修改

我尝试在Linq to SQL中使用DateTime2表示的.Date部分:

MyTable.Where(t => t.Date.Date == DateTime.Today).ToList()

但我仍然一无所获。然而,在我的数据库中,有一些值2011-08-05 00:00:00.0000000的行显然是今天。

再次修改 我已经运行了查询:

List<string> dates = MyTable.Select(t => t.Date.Date.ToString()).ToList();

我得到的结果如2011-08-05,所以这部分显然有用。

然而,当我跑

DateTime.Today.Date.ToString()

我得到08/05/2011 00:00:00。这个时间部分的增加会导致问题吗?我该如何删除它?

编辑3

使用代码使其工作:

MyTable.Where(t => t.Date.Date.ToString() == DateTime.Today.Date.ToString("yyyy-dd-MM")).ToList();

虽然这看起来很hacky(在比较之前转换为字符串)并且肯定必须有更清洁的方式?

2 个答案:

答案 0 :(得分:1)

听起来数据库中的日期实际上并不是今天(5月8日)。可能是8月5日。

答案 1 :(得分:0)

看起来你的datetime2字段叫做Date。您需要使用此Date字段的Date属性来忽略时间。

MyTable.Where(t => t.Date.Date == DateTime.Today).ToList()