3

我有三个表用户,用户角色,角色。

  • Usres 表的列是 UserId(Pk varchar(20)), CashCenterId(Int)
  • UserRoles 的列是 UserRoleID(pk Int)、UserId(Fk 到用户表)、RoleID(Fk 到角色表)
  • Roles 的列是 RoleId(Pk int)、RoleName(varchar(30))

我正在使用 LINQ to ENTITY Framework 来查询它们。

现在我想要一个函数来检查登录用户是否具有“FFFAdmin”角色,因此我将登录用户的 UserId 传递给该函数并在函数中执行以下操作。

     public bool isUserFFFAdmin(string UserId){

       return (from u in Db.Users
                    join ur in Db.UserRoles on u.UserID equals ur.UserID
                    join r in Db.Roles on ur.RoleID equals r.RoleID
                    where r.RoleName == "FFFAdmin" 
                    && u.UserID.Equals(UserId)
                    select '1').Any();
       }

现在的问题是这个查询不区分大小写所以如果我有两个用户说

1.“Ram”角色为“siteUser” 2.“ram”角色为“FFFAdmin”

现在,当我通过“Ram”时,此函数应返回 false,但由于此查询的不区分大小写的行为,它返回 true。

注意* 我无法更改数据库的排序规则类型以使查询区分大小写。请帮助我是实体和 LInq 的新手。

4

1 回答 1

1

将任务分成两部分

var users = from u in Db.Users
            join ur in Db.UserRoles on u.UserID equals ur.UserID
            join r in Db.Roles on ur.RoleID equals r.RoleID
            where r.RoleName == "FFFAdmin" 
               && u.UserID == UserId
            select u.UserID;

return users.AsEnumerable().Any(s => s == UserId);

第二部分是在AsEnumerable()区分大小写的 C# 环境中完成的,而主要的过滤任务仍然是数据库作业。

于 2013-02-14T20:41:48.353 回答