2017-05-25 36 views
0

我是lambda和mvc c#的新手。我正在使用简单的查询使用C#。现在我遇到了这种类型的查询,我不知道如何实现这个lambda。多个表中没有加入mvc 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 
    [email protected] and 
    usr.roleID=sec.roleID and 
    rol.roleId=sec.roleID and 
    rol.LoweredRoleName = LOWER(@RoleName) and 
    sec.HasAccess=1 and 
    sec.ModuleId=sub.SubModuleId 
+0

请参阅MSDN:https://code.msdn.microsoft.com/101-LINQ-Samples-3fb9811b – jdweng

+1

得到看看这个问题:[9273369](https://stackoverflow.com/questions/ 9273369/how-do-i-select-multiple-tables-in-linq) –

+0

我认为lambda很难实现。你可以通过一些查询来分开它们。 – Tomato32

回答

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,这是完全不必要的。

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();