man*_*nna 1 c# linq error-handling datetime
大家好,我目前遇到以下代码的2个问题:
返回result1后,我正在尝试检查它是否为!= null,如果不是,它将开始删除所选的记录.问题是,即使result1没有返回任何内容,默认情况下if语句也不会选择这个,所以我想我错过了什么,但是什么?
我希望只返回超过10分钟的值(稍后将缩放到12小时)来执行此操作我正在检查a.DateTime,它是存储在数据库中的DateTime值.但是,如果我使用<=或> =运算符它不会再次工作,我错过了什么?
DateTime dateTime = DateTime.Now.Subtract(new TimeSpan(0, 0, 10, 0));
var result1 = (from a in cpuInfo
where a.DateTime <= dateTime
select a).DefaultIfEmpty(null);
if (result1 != null)
{
foreach (TblCPUInfo record1 in result1)
{
localDB.TblCPUInfo.DeleteOnSubmit(record1);
localDB.SubmitChanges();
}
}
Run Code Online (Sandbox Code Playgroud)菲利普谈到了事情的序列方面 - 尽管你甚至不需要打电话Any().毕竟,如果没有变化,循环就不会做任何事情.
您真的想在每次迭代时提交更改吗?最后一次这样做可能更有意义.此外,您可以使用DateTime.AddMinutes初始"10分钟前"更简单,如果您只是通过一个Where子句过滤,我会使用点符号.
在完成所有这些更改(并使变量名称更有用)之后,代码将如下所示:
DateTime tenMinutesAgo = DateTime.Now.AddMinutes(-10);
var entriesToDelete = cpuInfo.Where(entry => entry.DateTime <= tenMinutesAgo);
foreach (var entry in entriesToDelete)
{
localDB.TblCPUInfo.DeleteOnSubmit(entry);
}
localDB.SubmitChanges();
Run Code Online (Sandbox Code Playgroud)
现在,至于为什么<=不适合你...你是否可能需要UTC时间而不是当地时间?例如:
DateTime tenMinutesAgo = DateTime.UtcNow.AddMinutes(-10);
Run Code Online (Sandbox Code Playgroud)
如果仍然无法正常工作,我建议您查看生成的查询并在SQL工具(例如企业管理器或SQL Server Management Studio)中使用它来确定它为什么不返回任何结果.