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

C# 在LINQ中检查null类型或使用Any()哪个更好?,c#,entity-framework,linq,linq-to-sql,linq-to-entities,C#,Entity Framework,Linq,Linq To Sql,Linq To Entities,我有这两个代码,我必须知道哪一个更好用。 我想这是一样的。 如果我没弄错的话,第一个对数据库只有一次调用, 我不知道是否检查回购协议!=null是正确的 (1) (2) 第二个选项两次查找一个元素。这里 Repository .Query() .Any(ur => ur.CustomerId == customerId) 这里呢 Repository .Query() .Where(ur => ur.CustomerId == customerId) .Sing

我有这两个代码,我必须知道哪一个更好用。 我想这是一样的。 如果我没弄错的话,第一个对数据库只有一次调用, 我不知道是否检查回购协议!=null是正确的

(1)

(2)


第二个选项两次查找一个元素。这里

Repository
  .Query()
  .Any(ur => ur.CustomerId == customerId)
这里呢

Repository
  .Query()
  .Where(ur => ur.CustomerId == customerId)
  .Single()
第一个选项只能找到一次。这是选择第一个选项的原因。 此外,您还可以改进此代码:

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

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

未来的建议:当您想检查查询中是否有任何元素,但不需要该元素时,请使用
Any()

第二个选项会两次查找一个元素。这里

Repository
  .Query()
  .Any(ur => ur.CustomerId == customerId)
这里呢

Repository
  .Query()
  .Where(ur => ur.CustomerId == customerId)
  .Single()
第一个选项只能找到一次。这是选择第一个选项的原因。 此外,您还可以改进此代码:

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

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

未来的建议:当您想检查查询中是否有任何元素,但不需要该元素时,请使用
Any()

在第二种方法中,您首先通过
Any
项导航项以查找匹配项,然后再通过
项导航以获取匹配项。
SingleOrDefault
w将在一个步骤中完成任务,并检查一个项目(以确定其是否为空)比导航所有项目要便宜得多。

因此,在我看来,第一种方法更快更好。

在第二种方法中,您首先通过
任何
项目来导航项目,以找到匹配项,然后再次获得匹配项。
SingleOrDefault
w将在一个步骤中完成任务,并检查一个项目(以确定其是否为空)比导航所有项目要便宜得多。
所以在我看来,第一种方法更快更好