按日期筛选(linq)

按日期筛选(linq),linq,datetime,Linq,Datetime,我在数据库中有一个名为“repeat”的DateTime字段。我只想记录“重复”中的日期是今天 我试过: (...).Where(e => e.repeat.Value.Date.Day.Equals(DateTime.Now.Day)); 或: 但它不起作用 有什么想法吗 谢谢,KamilCompare short date(比较短日期)可确保您在一次拍摄中获得相同的年/月/日: (...).Where(e => e.repeat.Value.Date.ToShortDateSt

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

我试过:

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

但它不起作用

有什么想法吗


谢谢,Kamil

Compare short date(比较短日期)可确保您在一次拍摄中获得相同的年/月/日:

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

比较短日期可确保年/月/日一次性相同:

(...).Where(e => e.repeat.Value.Date.ToShortDateString() == DateTime.Now.ToShortDateString());
“它不工作”是相当模糊的,但目前你检查的是一周中的哪一天,而不是日期。我建议使用:

Date today = DateTime.Today;

var query = ....Where(e => e.repeat.Value.Date == today);
编辑:不清楚此处涉及的类型-如果
repeat.Value
本身不是
日期时间
,您可能需要:

var query = ....Where(e => e.repeat.Value.Date.Date == today);
“它不工作”是相当模糊的,但目前你检查的是一周中的哪一天,而不是日期。我建议使用:

Date today = DateTime.Today;

var query = ....Where(e => e.repeat.Value.Date == today);
编辑:不清楚此处涉及的类型-如果
repeat.Value
本身不是
日期时间
,您可能需要:

var query = ....Where(e => e.repeat.Value.Date.Date == today);
尝试一下:

(...).Where(e => (e.repeat >= DateTime.Today) && (e.repeat < DateTime.Today.AddDays(1)))
(…)。其中(e=>(e.repeat>=DateTime.Today)和&(e.repeat
尝试一下:

(...).Where(e => (e.repeat >= DateTime.Today) && (e.repeat < DateTime.Today.AddDays(1)))
(…)。其中(e=>(e.repeat>=DateTime.Today)和&(e.repeat
专家解决方案是:在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();
var date=DateTime.Now.AddDays(-1).date;
var actions=await_context.Set()
.AsNoTracking()
.Where(x=>DbFunctions.CreateDateTime(x.YourColumn.Value.Year,x.YourColumn.Value.Month,x.YourColumn.Value.Day,0,0)==date)
.ToListAsync();

专家解决方案是:在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();
var date=DateTime.Now.AddDays(-1).date;
var actions=await_context.Set()
.AsNoTracking()
.Where(x=>DbFunctions.CreateDateTime(x.YourColumn.Value.Year,x.YourColumn.Value.Month,x.YourColumn.Value.Day,0,0)==date)
.ToListAsync();

如果
repeat.Value.Date
包含与午夜不同的时间?@ArnaudF.:你说的“与午夜不同的时间”是什么意思?我假设
Value
是一个
DateTime
,因此
值。Date
是一天开始的
DateTime
。@John:在DateTime中,将“2011/01/01 00:00:00 AM”与“2011/01/01 06:00:00 AM”进行比较时,结果将为假。还是我错过了什么?原始帖子没有说这不可能发生。@ArnaudF:我正在使用数据库值的
Date
属性,并将其与
DateTime.Today
进行比较。
Date
属性将返回相关日期的午夜。如果
repeat.Value.Date
包含与午夜不同的时间?@ArnaudF:“与午夜不同的时间”是什么意思?我假设
Value
是一个
DateTime
,因此
值。Date
是一天开始的
DateTime
。@John:在DateTime中,将“2011/01/01 00:00:00 AM”与“2011/01/01 06:00:00 AM”进行比较时,结果将为假。还是我错过了什么?原始帖子没有说这不可能发生。@ArnaudF:我正在使用数据库值的
Date
属性,并将其与
DateTime.Today
进行比较。
Date
属性将返回所讨论的那天的午夜。我喜欢这个属性,它对e.repeat.中的null具有鲁棒性,它是sargable,这可能是决定性的。我喜欢这个属性,它对e.repeat.中的null具有鲁棒性,它是sargable,这可能是决定性的。@Kamil:如果其中任何一项对您有帮助,请将其标记为已接受。@Kamil:如果其中任何一项对您有帮助,请将其标记为已接受。