LINQ 选择查询始终生成 true 值
本文关键字:true 选择 查询 LINQ | 更新日期: 2023-09-27 18:33:57
当我点击下一行时,无论"local"是否出现在连接Roles
表中,我总是收到一个 true。
if (objUserRoles.Select(x => (x.Role.Role1 == "local")).Count() > 0)
我的语法正确吗?
您正在寻找:
if (objUserRoles.Any(x => x.Role.Role1 == "local"))
您正在做的是选择一系列bool
。 例如,如果你有 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 扩展方法
它检查条件
if (objUserRoles.Where(x => (x.Role.Role1 == "local")).Count() > 0)
或
任何扩展方法
if (objUserRoles.Any(x => x.Role.Role1 == "local"))
你想用.Where(expr) 而不是 .选择(expr)。
用Any
if (objUserRoles.Where(x => (x.Role.Role1 == "local")).Any())
正如其他人所指出的,.任意() 或 .其中()。Count() 会给你你想要的东西。 您的代码...
if (objUserRoles.Select(x => (x.Role.Role1 == "local")).Count() > 0)
。实际上是创建一个IEnumerable<bool>
,其中每个项目都是基于x.Role.Role1 == "local"
的真/假。 您的最终结果始终为 true,因为您的 IEnumerable<bool>
的.Count()
将始终大于 0,除非您的 objUserRoles 集合实际上包含 0 个元素。
希望澄清对您有意义! :)
好吧,你的 are 语句将objUserRoles
中的任何内容转换为boolean
,因此
objUserRoles.Select(x => (x.Role.Role1 == "local"))
是包含您objUserRoles
收藏中尽可能多的元素的IEnumerable<bool>
。我想你想做什么由以下查询描述
if (objUserRoles.Where(x => x.Role.Role1 == "local").Count() > 0)
甚至更好
if (objUserRoles.Any(x => x.Role.Role1 == "local"))