2016-01-20 67 views
2

我正忙着调整自己的MS组装Microsoft.AspNet.Identity.EntityFramework使用的NHibernate的分支,我看到的类似于下面的代码数量惊人:为什么不直接在Equals()中使用对象属性?

var userId = user.Id; 
var roleId = role.Id; 
return await _userRoles.AnyAsync(ur => ur.RoleId.Equals(roleId) && ur.UserId.Equals(userId)).WithCurrentCulture(); 

为什么不使用呢?

return await _userRoles.AnyAsync(ur => ur.RoleId.Equals(role.Id) && ur.UserId.Equals(user.Id)).WithCurrentCulture(); 
+0

第二个代码是否给出了一些错误或者只是返回null? –

+2

这些针对数据库的调用?也许避免通过变量访问值可以让查询计划更容易被缓存。 –

+0

@ArijitMukherjee不,看起来工作是一样的。 – ProfK

回答

1

由于user.Id可以很好AnyAsync之前变化接通表达成SQL。不能保证表达式是立即求值的,所以引用临时局部变量是有意义的。

例如,在连接到数据库之前,不生成SQL可能是有意义的。