2016-01-20 140 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可能是有意義的。

相關問題