2012-01-31 66 views
2

如果objHistory.IsLoginFromWhitelistedIP是在下面的查詢「真」,我想比較t1.Role.IsAvailableFromRestrictedIp真假並返回的一切。比較正布爾結果真假LINQ查詢

return from t1 in db.UserRoles 
        where ((t1.Role.IsAvailableFromRestrictedIp 
          == objHistory.IsLoginFromWhitelistedIP) 
        select t1; 

什麼是最好的方法來實現這一目標?

+0

是t1.Role.IsAvailableFromRestrictedIp可爲空? – thumbmunkeys 2012-01-31 15:00:52

+0

它可以爲空。 – Nick 2012-01-31 15:01:28

回答

3
from t1 in db.UserRoles 
where !objHistory.IsLoginFromWhitelistedIP || (t1.Role.IsAvailableFromRestrictedIp ?? true) 
select t1 

from t1 in db.UserRoles 
where objHistory.IsLoginFromWhitelistedIP && (t1.Role.IsAvailableFromRestrictedIp ?? true) 
select t1 

取決於objHistory.IsLoginFromWhitelistedIP過濾功能,這意味着:

  • 如果objHistory.IsLoginFromWhitelistedIP值是false =記錄可能因t1.Role.IsAvailableFromRestrictedIp是有效的:採取第1版
  • if objHistory.IsLoginFromWhitelistedIP value is false =該記錄是無效的天生(沒必要做的t1.Role.IsAvailableFromRestrictedIp評估):取2版

此外,你還可以??後指定您System.Nullable<bool>的默認值,或者去.GetValueOrDefault(T defaultValue)

+0

很棒的回答。謝謝。 – Nick 2012-01-31 16:52:07

1
 return from t1 in db.UserRoles 
       where t1.Role.IsAvailableFromRestrictedIp != null && 
        objHistory.IsLoginFromWhitelistedIP 
       select t1; 
+0

這不會編譯..有一個左括號 – 2012-01-31 15:03:05

+0

@Andreas修復 – thumbmunkeys 2012-01-31 15:03:45

+0

該操作需要基於'objHistory.IsLoginFromWhitelistedIP'的條件比較 – 2012-01-31 15:10:37