检查来自LINQ查询的Var是否为Null并返回早于x的值

man*_*nna 1 c# linq error-handling datetime

大家好,我目前遇到以下代码的2个问题:

  1. 返回result1后,我正在尝试检查它是否为!= null,如果不是,它将开始删除所选的记录.问题是,即使result1没有返回任何内容,默认情况下if语句也不会选择这个,所以我想我错过了什么,但是什么?

  2. 我希望只返回超过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)

Jon*_*eet 5

菲利普谈到了事情的序列方面 - 尽管你甚至不需要打电话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)中使用它来确定它为什么不返回任何结果.