当我点击以下行时,无论连接Roles
表中是否出现“本地”,我总是收到一个 true。
if (objUserRoles.Select(x => (x.Role.Role1 == "local")).Count() > 0)
我的语法正确吗?
您正在寻找:
if (objUserRoles.Any(x => x.Role.Role1 == "local"))
您正在做的是选择一系列bool
s。例如,如果您的查询返回了 3 个项目false, true, false
,那么您要求该false, true, false
序列的表达式,而不仅仅是位于它为真的位置的对象。看起来您正在尝试选择该系列布尔值为真的值,这意味着您应该使用Where
而不是Select
. 但是,由于您真正在做的Where
就是Count
检查至少一个,所以您应该这样做Any
,这样做效率更高。
你需要的是Where
:
if (objUserRoles.Where(x => x.Role.Role1 == "local").Count() > 0)
或者Any
它甚至更好(并且性能更好,因为在大多数情况下它不会像这样遍历整个集合Count()
)
if (objUserRoles.Any(x => x.Role.Role1 == "local"))
我认为您想使用 .Where(expr) 而不是 .Select(expr)。
最好有一个Any
if (objUserRoles.Where(x => (x.Role.Role1 == "local")).Any())
正如其他人指出的那样, .Any() 或 .Where().Count() 将为您提供所需的内容。你的代码...
if (objUserRoles.Select(x => (x.Role.Role1 == "local")).Count() > 0)
...实际上是IEnumerable<bool>
在创建一个基于x.Role.Role1 == "local"
. 您的最终结果始终为真,因为除非您的 objUserRoles 集合实际上包含 0 个元素,否则.Count()
您的IEnumerable<bool>
将始终大于 0。
希望澄清对您有意义!:)
好吧,您的 are not 语句将您中的任何内容转换objUserRoles
为 a 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"))