当我点击以下行时,无论“本地”是否出现在加入Roles
表中,我总是收到一个真实的。
if (objUserRoles.Select(x => (x.Role.Role1 == "local")).Count() > 0)
我的语法是否正确?
答案 0 :(得分:10)
您正在寻找:
if (objUserRoles.Any(x => x.Role.Role1 == "local"))
您正在做的是选择一系列bool
。例如。如果您有3个项目,您的查询返回false, true, false
,那么您要求该false, true, false
序列的表达式,而不仅仅是它所在位置的对象。看起来您正在尝试选择该系列bool为真的值,这意味着您应该使用Where
而不是Select
。但是,由于你所做的只是Where
和Count
正在检查至少一个,你应该Any
,这样做会更有效率。
答案 1 :(得分:6)
您需要的是Where
:
if (objUserRoles.Where(x => x.Role.Role1 == "local").Count() > 0)
或者使用Any
它甚至更好(并且表现更好,因为在大多数情况下它不会像Count()
那样通过整个集合进行迭代)
if (objUserRoles.Any(x => x.Role.Role1 == "local"))
答案 2 :(得分:1)
使用Where扩展方法
检查条件
if (objUserRoles.Where(x => (x.Role.Role1 == "local")).Count() > 0)
OR
Any扩展方法
if (objUserRoles.Any(x => x.Role.Role1 == "local"))
答案 3 :(得分:1)
我认为您想使用.Where(expr)而不是.Select(expr)。
答案 4 :(得分:1)
使用Any
if (objUserRoles.Where(x => (x.Role.Role1 == "local")).Any())
答案 5 :(得分:1)
正如其他人所指出的,.Any()或.Where()。Count()将为您提供所需的内容。你的代码......
if (objUserRoles.Select(x => (x.Role.Role1 == "local")).Count() > 0)
...实际上是根据IEnumerable<bool>
创建x.Role.Role1 == "local"
,其中每个项目都是真/假。您的最终结果始终为真,因为.Count()
的{{1}}将始终大于0,除非您的objUserRoles集合实际上包含0个元素。
希望澄清对你有意义! :)
答案 6 :(得分:0)
好吧,您的声明不会将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"))