LINQ选择查询总是产生真值

时间:2012-05-10 15:04:48

标签: c# linq

当我点击以下行时,无论“本地”是否出现在加入Roles表中,我总是收到一个真实的。

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

我的语法是否正确?

7 个答案:

答案 0 :(得分:10)

您正在寻找:

if (objUserRoles.Any(x => x.Role.Role1 == "local"))

您正在做的是选择一系列bool。例如。如果您有3个项目,您的查询返回false, true, false,那么您要求该false, true, false序列的表达式,而不仅仅是它所在位置的对象。看起来您正在尝试选择该系列bool为真的值,这意味着您应该使用Where而不是Select。但是,由于你所做的只是WhereCount正在检查至少一个,你应该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"))