C# 在LINQ中检查null类型或使用Any()哪个更好?
我有这两个代码,我必须知道哪一个更好用。 我想这是一样的。 如果我没弄错的话,第一个对数据库只有一次调用, 我不知道是否检查回购协议!=null是正确的 (1) (2)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
第二个选项两次查找一个元素。这里
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将在一个步骤中完成任务,并检查一个项目(以确定其是否为空)比导航所有项目要便宜得多。
所以在我看来,第一种方法更快更好