2013-02-14 73 views
3

我有三个表用户,UserRoles,角色。 Usres表需要解决大小写不敏感的Linq to Entity Framework查询

  • 列是用户ID(PK VARCHAR(20)),CashCenterId(INT)的UserRole的
  • 列是UserRoleID(PK智力),用户ID(FK到用户表), 角色ID(FK到角色表)角色
  • 列是角色ID(PK INT),角色名(为varchar(30))

我使用LINQ到实体框架来对它们进行查询。

现在我想要一个函数来检查登录用户是否具有'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'与角色‘FFFAdmin’

RAM

现在,当我传递'Ram'时,此函数应该返回false,但由于此查询的大小写不敏感,它将返回true。

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

回答

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#环境中进行,而主过滤任务仍然是一个数据库作业任务。

+0

非常感谢@Gert Arnold它的工作(我认为最好的解决方案将是改变我的专栏的排序类型) – 2013-02-15 08:45:13