按日期过滤(linq)

时间:2011-10-04 08:12:24

标签: linq datetime

我在数据库中有名为“repeat”的DateTime字段。我想只记录今天“重复”日期的记录。

我试过了:

(...).Where(e => e.repeat.Value.Date.Day.Equals(DateTime.Now.Day));

或:

(...).Where(e => e.repeat.Value.Date.Day==DateTime.Now.Day);

但它不起作用。

有什么想法吗?

谢谢,卡米尔

4 个答案:

答案 0 :(得分:2)

“它不起作用”非常模糊,但目前您正在检查星期几而不是日期。我建议使用:

Date today = DateTime.Today;

var query = ....Where(e => e.repeat.Value.Date == today);

编辑:目前尚不清楚这里涉及的类型是什么 - 如果repeat.Value本身不是DateTime,您可能需要:

var query = ....Where(e => e.repeat.Value.Date.Date == today);

答案 1 :(得分:1)

尝试一下:

(...).Where(e => (e.repeat >= DateTime.Today) && (e.repeat < DateTime.Today.AddDays(1)))

答案 2 :(得分:0)

比较短日期确保一年中每年/每月/每天都相同:

(...).Where(e => e.repeat.Value.Date.ToShortDateString() == DateTime.Now.ToShortDateString());

答案 3 :(得分:0)

专家解决方案是:在Linq查询中使用DbFunctions.CreateDateTime()。

var date = DateTime.Now.AddDays(-1).Date;

var actions = await _context.Set<Your_table>()
        .AsNoTracking()
        .Where(x => DbFunctions.CreateDateTime(x.YourColumn.Value.Year, x.YourColumn.Value.Month, x.YourColumn.Value.Day, 0, 0, 0) == date)
        .ToListAsync();