为什么IF语句会影响我的LINQ语句的结果?

wjh*_*man 6 c# linq sharepoint

我最近一直在和LINQ一起工作,感谢一些StackOverflowers的帮助,我得到了这个声明:

var traceJob =
    from jobDefinition in service.JobDefinitions
    where jobDefinition.Id == traceGuid
    select jobDefinition;

if (traceJob != null && traceJob.Count() == 1)
{
 traceJob.First().RunNow();
 Console.WriteLine(traceJob.First().DisplayName + "  Last Run Time: " + traceJob.First().LastRunTime);
}
Run Code Online (Sandbox Code Playgroud)

但是,我感到很困惑,因为使它工作的那块是if(traceJob.Count() ==1).如果我删除该部分,那么我会收到一个ObjectNullRef错误,指出枚举traceJob没有产生任何结果.

现在,据我所知,if检查计数的语句实际上不应该改变Linq语句的结果吗?任何人都可以向我解释为什么我会看到这种行为?

D S*_*ley 6

不,它不应该.我的猜测是你遇到了枚举真的是空的情况,通过检查计数> 0,First()不会失败.

作为旁注,Any()这里可能是一个更好的检查(取决于您的存储库的底层存储)它可能比Count()以下更快:

if (traceJob != null && traceJob.Any())
{
 traceJob.First().RunNow();
 Console.WriteLine(traceJob.First().DisplayName + "  Last Run Time: " + traceJob.First().LastRunTime);
}
Run Code Online (Sandbox Code Playgroud)