我有这两个代码,我必须知道哪个更好用。 我认为这是一样的。 如果我没有弄错,第一个只有一次调用数据库,但是, 我不知道检查repo!= null是否正确。
(1)
var repo = Repository
.Query()
.Where(ur => ur.CustomerId == customerId)
.SingleOrDefault();
if (repo != null)
{
// Update repo
repo.Name = "name here";
}
else
{
// code
}
(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
}
答案 0 :(得分:6)
第二个选项找到一个元素两次。在这里
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()
,但不需要元件。
答案 1 :(得分:0)
在第二种方法中,您首先通过Any
项目浏览项目以查找匹配项,然后再次获取匹配项目。 SingleOrDefault
将在一步中执行任务并检查一个项目(以确定其是否为空)比导航所有项目便宜得多。
所以我认为第一种方法更快更好。