2016-04-19 26 views
0

我有这两个代码,我必须知道哪个更好用。 我在想这是一样的。 如果我没有弄错,第一个只有一个调用数据库,但是, 我不知道检查repo!= null是否正确。哪种更好的检查null类型或在LINQ中使用Any()?

(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 
} 

回答

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()当你想检查事实你在查询中的任何元素,但你不需要这个元素。

0

在第二种方法中,您首先通过Any项目浏览项目以查找匹配项,然后再次获取匹配项目。 SingleOrDefault将在1步中完成任务,并检查一个项目(以确定是否为空)以比浏览所有项目便宜。
所以我认为第一种方法更快更好。

相关问题