LINQ 选择查询始终生成 true 值

本文关键字:true 选择 查询 LINQ | 更新日期: 2023-09-27 18:33:57

当我点击下一行时,无论"local"是否出现在连接Roles表中,我总是收到一个 true。

if (objUserRoles.Select(x => (x.Role.Role1 == "local")).Count() > 0)

我的语法正确吗?

LINQ 选择查询始终生成 true 值

您正在寻找:

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"))