x.CreateDate
DateTime
存储在我们的数据库中,直到毫秒。我的dateTimePicker值startdate和enddate只允许查询到秒。
如何更改我的查询以忽略x.CreateDate
的毫秒数?我认为下面编写的代码可以工作,但事实并非如此。
if (stardDateIsValid && endDateIsValid && startdate == enddate)
query = _context.Logs
.Where(x => x.ApplicationID == applicationId &&
x.CreateDate.AddMilliseconds(-x.CreateDate.Millisecond) == startdate)
.OrderByDescending(x => x.ID)
.Take(count);
答案 0 :(得分:1)
以相同格式获取CreateDate
和startdate
有助于您比较苹果与苹果。这应该可以实现。
if (stardDateIsValid && endDateIsValid && startdate == enddate)
query = _context.Logs
.Where(x => x.ApplicationID == applicationId &&
x.CreateDate.ToString(@"MM/DD/YYYY h:mm:ss") == startdate.ToString(@"MM/DD/YYYY h:mm:ss")
.OrderByDescending(x => x.ID)
.Take(count);
答案 1 :(得分:1)
var query = from l in _context.Logs
where l.ApplicationID == applicationId
&& SqlMethods.DateDiffSecond(l.CreateDate,startdate) == 0
orderby l.ID descending
select l).Take(count);
通过将两个日期作为日期进行比较,这可以避免将表中的每个日期转换为字符串以及后续的字符串比较。
答案 2 :(得分:0)
我不知道为什么我无法从上面发布的查询中获得任何结果,因为我尝试了几种主题变体。但是我确实通过在startdate和enddate变量中添加毫秒来使它正常工作。
if (stardDateIsValid && endDateIsValid)
startdate = startdate.AddMilliseconds(000);
enddate = enddate.AddMilliseconds(999);
query = _context.Logs.Where(x => x.ApplicationID == applicationId && x.CreateDate >= startdate && x.CreateDate <= enddate).OrderByDescending(x => x.ID).Take(count);
答案 3 :(得分:0)
您可以创建扩展方法。
public const long TicksPerMillisecond = 10000;
public const long TicksPerSecond = TicksPerMillisecond * 1000;
public static bool IsEqualIgnoreMilliseconds(this DateTime date, DateTime compareDate)
{
long tickDiff = date.Ticks - compareDate.Ticks;
return tickDiff > 0 ? tickDiff < TicksPerSecond : tickDiff < -TicksPerSecond;
}
然后你可以使用它:
if (stardDateIsValid && endDateIsValid && startdate == enddate)
query = _context.Logs
.Where(x => x.ApplicationID == applicationId &&
x.CreateDate.IsEqualIgnoreMilliseconds(startdate)
.OrderByDescending(x => x.ID)
.Take(count);