【问题标题】:Need work around for case Insensitive Linq to Entity Framework query需要解决不区分大小写的 Linq to Entity Framework 查询
【发布时间】:2013-02-14 19:05:11
【问题描述】:

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

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

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

现在我想要一个函数来检查登录用户是否具有“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. 角色为“siteUser”的“Ram” 2. 角色为“FFFAdmin”的“ram”

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

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

【问题讨论】:

    标签: linq-to-entities


    【解决方案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# 环境中完成的,而主要的过滤任务仍然是数据库作业。

    【讨论】:

    • 非常感谢@Gert Arnold 它成功了(我认为最好的解决方案是更改我的列的排序规则类型)
    猜你喜欢
    • 2021-07-12
    • 1970-01-01
    • 2019-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-02
    • 2011-04-20
    • 1970-01-01
    相关资源
    最近更新 更多