mvc c#从lambda中的多个表中选择

时间:2017-05-25 07:41:06

标签: c# asp.net-mvc lambda

我是lambda和mvc c#的新手。我使用c#进行简单查询。现在我遇到了这种类型的查询,我不知道如何实现这个lambda。多个表中没有连接

select distinct sub.SubModuleName --[SMSSysmanager].
from    
        [dbo].tbl_Securable sec,
        [dbo].aspnet_UsersInRoles usr,
        [dbo].aspnet_Roles rol,
        [dbo].tbl_SubModule sub,
        [dbo].tbl_Module mod

where 
    usr.UserId=@userid and
    usr.roleID=sec.roleID and 
    rol.roleId=sec.roleID and
    rol.LoweredRoleName = LOWER(@RoleName) and
    sec.HasAccess=1 and 
    sec.ModuleId=sub.SubModuleId

2 个答案:

答案 0 :(得分:0)

实际上有多个内连接,但它是oldskool。

它会转化为:

var distinctItems = (from sec in db.tbl_Securable
                     from usr in db.aspnet_UsersInRoles
                     from rol in db.aspnet_Roles
                     from sub in db.tbl_SubModule
                     // from mod in db.tbl_Module
                     where
                         usr.UserId == userid &&
                         usr.roleID == sec.roleID &&
                         rol.roleId == sec.roleID &&
                         rol.LoweredRoleName == roleName.ToLower() &&
                         sec.HasAccess &&
                         sec.ModuleId == sub.SubModuleId
                     select
                         sub.SubModuleName).Distinct();

我更喜欢指定连接,因为我发现它使语法更合理。

var distinctItems = (from sub in db.tbl_SubModule
                     // from mod in db.tbl_Module
                     join sec in db.tbl_Securable on sub.SubModuleId equals sec.ModuleId
                     join usr in db.aspnet_UsersInRoles on sec.roleID equals usr.roleID
                     join rol in db.aspnet_Roles on sec.roleID equals rol.roleId
                     where usr.UserId == userid
                     where sec.HasAccess
                     where rol.LoweredRoleName == roleName.ToLower()
                     select sub.SubModuleName).Distinct();

我对tbl_Module有点困惑,因为它没有在任何地方使用过,因为你在sub.SubModuleName上做了一个截然不同的事情,所以它完全是不必要的。

答案 1 :(得分:0)

var distinctItems = (from sec in context.tbl_Securable
                 from usr in context.aspnet_UsersInRoles
                 from rol in context.aspnet_Roles
                 from sub in context.tbl_SubModule
                 from mod in context.tbl_Module
                 where
                     usr.UserId == userid &&
                     usr.roleID == sec.roleID &&
                     rol.roleId == sec.roleID &&
                     rol.LoweredRoleName == roleName.ToLower() &&
                     sec.HasAccess &&
                     sec.ModuleId == sub.SubModuleId
                 select
                     sub.SubModuleName).Distinct();
相关问题