为什么不直接在 Equals() 中使用对象属性呢?
Why not directly use object properties in Equals()?
我正忙于调整我自己的 MS 程序集分支 Microsoft.AspNet.Identity.EntityFramework
以使用 NHibernate,并且我注意到大量如下代码:
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();
因为user.Id
很可能在AnyAsync
把表达式变成SQL之前改变。不能保证立即计算表达式,因此引用临时局部变量是有意义的。
例如,在与数据库建立连接之前不生成 SQL 可能是有意义的。
我正忙于调整我自己的 MS 程序集分支 Microsoft.AspNet.Identity.EntityFramework
以使用 NHibernate,并且我注意到大量如下代码:
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();
因为user.Id
很可能在AnyAsync
把表达式变成SQL之前改变。不能保证立即计算表达式,因此引用临时局部变量是有意义的。
例如,在与数据库建立连接之前不生成 SQL 可能是有意义的。