哪个更好地检查null类型或在LINQ中使用Any()?

use*_*948 0 c# linq linq-to-entities entity-framework linq-to-sql

我有这两个代码,我必须知道哪个更好用.我在想这是一样的.如果我没有弄错,第一个只有一次调用数据库,但是,我不知道检查repo!= null是否正确.

(1)

var repo = Repository
  .Query()
  .Where(ur => ur.CustomerId == customerId)
  .SingleOrDefault();

if (repo != null)
{
    // Update repo
    repo.Name = "name here";
}
else
{
    // code
}
Run Code Online (Sandbox Code Playgroud)

(2)

var repo = Repository
  .Query()
  .Any(ur => ur.CustomerId == customerId);

if (repo)
{
    var result = Repository
      .Query()
      .Where(ur => ur.CustomerId == customerId)
      .Single();

    result.Name = "name here";
}
else
{
    // code
}
Run Code Online (Sandbox Code Playgroud)

use*_*216 6

第二个选项找到一个元素两次.这里

Repository
  .Query()
  .Any(ur => ur.CustomerId == customerId)
Run Code Online (Sandbox Code Playgroud)

和这里

Repository
  .Query()
  .Where(ur => ur.CustomerId == customerId)
  .Single()
Run Code Online (Sandbox Code Playgroud)

第一个选项只发现一次.这是选择第一个选项的原因.而且,您可以使此代码更好:

var repo = Repository
  .Query()
  .Where(ur => ur.CustomerId == customerId)
  .SingleOrDefault();
Run Code Online (Sandbox Code Playgroud)

写吧

var repo = Repository
  .Query()
  .SingleOrDefault(ur => ur.CustomerId == customerId);
Run Code Online (Sandbox Code Playgroud)

以及对未来的建议:Any()当你想检查查询中有任何元素这一事实时使用,但你不需要这个元素.