當我點擊下面的行時,無論在加入Roles
表中是否出現「本地」,我總是會收到一個true。LINQ選擇查詢總是導致真值
if (objUserRoles.Select(x => (x.Role.Role1 == "local")).Count() > 0)
我的語法正確嗎?
當我點擊下面的行時,無論在加入Roles
表中是否出現「本地」,我總是會收到一個true。LINQ選擇查詢總是導致真值
if (objUserRoles.Select(x => (x.Role.Role1 == "local")).Count() > 0)
我的語法正確嗎?
你需要的是Where
:
if (objUserRoles.Where(x => x.Role.Role1 == "local").Count() > 0)
或用Any
它甚至更好(和高性能的,因爲在大多數情況下,它不會重複低谷整個集合類似Count()
)
if (objUserRoles.Any(x => x.Role.Role1 == "local"))
您要找的東西:
if (objUserRoles.Any(x => x.Role.Role1 == "local"))
你正在做的是選擇一系列bool
s。例如。如果您有3件商品的查詢返回false, true, false
,則表示您要求該false, true, false
順序,而不僅僅是該位置的對象。它看起來像你試圖選擇那些布爾系列是真的值,這意味着你應該使用Where
而不是Select
。但是,由於您真的在使用Where
和Count
正在檢查至少一個,所以您應該做Any
,這樣做效率更高。
我想你想使用.Where(expr)而不是.Select(expr)。
它是一個Any
if (objUserRoles.Where(x => (x.Role.Role1 == "local")).Any())
好不好,你不聲明變換你的objUserRoles
到boolean
任何東西,所以結果集的
objUserRoles.Select(x => (x.Role.Role1 == "local"))
是IEnumerable<bool>
與作爲你的objUserRoles
集合中的很多元素。 我猜你想通過下面的查詢
if (objUserRoles.Where(x => x.Role.Role1 == "local").Count() > 0)
甚至更好的描述
if (objUserRoles.Any(x => x.Role.Role1 == "local"))
正如其他人所指出的事,。任何()或。凡()。COUNT()會給你你想要的。你的代碼...
if (objUserRoles.Select(x => (x.Role.Role1 == "local")).Count() > 0)
...實際上是創建一個IEnumerable<bool>
其中每個項目是真/假基於x.Role.Role1 == "local"
。您的最終結果總是如此,因爲IEnumerable<bool>
的.Count()
將始終大於0,除非您的objUserRoles集合實際上包含0個元素。
希望澄清對你有意義! :)
看起來不錯,但避免'.Count()> 0'支持'.Any()'。格式列舉了整個列表,只要找到一個結果,後者就會退出。 – Jamiec