2017-05-25 76 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();