需要解决案例Insensitive Linq to Entity Framework查询

时间:2013-02-14 19:05:11

标签: linq-to-entities

我有三个表Users,UserRoles,Roles。

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

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

现在我想要一个函数来检查loggin用户是否具有'FFFAdmin'角色,所以我将loggin用户的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的新手。

1 个答案:

答案 0 :(得分: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#环境中完成,而主过滤任务仍然是数据库作业。