LINQ没有产生预期的结果

时间:2013-11-06 01:04:36

标签: c# linq

我很难理解为什么LINQ给出了与预期不同的结果。在下面的代码中,第一个return语句总是返回false。如果我暂停执行并检查roles变量,我可以看到其中一个角色的RoleID为1,即RolesEnum.SystemAdmin的值。然而,计数是0.我也尝试使用Any()并产生相同(不正确)的结果。

注释掉第一个return语句,第二个return语句正常工作。

对行为存在差异的任何见解或解释都表示赞赏。

感谢。

var roles = GetRoleRepository(database).GetRolesForUser(userEmail);

// Why is this always false?
return (roles.Where(userRoles => userRoles.RoleID == (int)Roles.RolesEnum.SystemAdmin).Count() > 0);

bool isUserInSystemAdminRole = false;

foreach (Role role in roles)
    if (role.RoleID == (int)Roles.RolesEnum.SystemAdmin)
        isUserInSystemAdminRole = true;

// this returns the correct result
return isUserInSystemAdminRole;

1 个答案:

答案 0 :(得分:0)

看起来您使用的是Entity Framework或其他ORM。他们不知道如何将此表达式转换为SQL语句。所以事先就像这样进行转换

var roles = GetRoleRepository(database).GetRolesForUser(userEmail);

int roleId = (int)Roles.RolesEnum.SystemAdmin;
return (roles.Where(userRoles => userRoles.RoleID == roleId).Count() > 0);

更好的解决方案是:

var roles = GetRoleRepository(database).GetRolesForUser(userEmail);

int roleId = (int)Roles.RolesEnum.SystemAdmin;
return roles.Any(userRoles => userRoles.RoleID == roleId);