Linq中的正确连接语句

时间:2013-06-30 08:00:00

标签: c# asp.net linq linq-to-sql

我搜索了我的问题的答案,因为我是一个初学者,我无法得到所有这些,所以问我自己, 我有两个表 SUBMENU AUTHORIZATION 我试着加入但不清楚是左侧还是右侧还是其他方式,因为我是linq的新手。

这是我到目前为止所做的,

var _lststage = 
    from sm in db.SUB_MENUs
    join a in db.AUTHORISATIONs 
        on sm.SUB_MENU_ID equals a.SUB_MENU_ID into joined_autho 
    from jA in joined_autho.DefaultIfEmpty()
    where sm.MENU_ID.Equals(ViewState["MenuId"]) &&
          jA.Roleid Equals ddlroleid.Selectedvalue
    select new
    {
         sm.SUB_MENU_ID,
         sm.SUB_MENU_NAME,
         jA.checkbox,
    };

我希望根据视图状态中的menuid从子菜单表中获取所有子菜单,并且, 我需要根据角色ID和子菜单获取授权表中复选框的值,如果授权表中没有该角色id的值,则应返回默认值。

希望我能很好地解释我的情景, 重复问题的可能性...... 对不起,如果。

1 个答案:

答案 0 :(得分:0)

您的查询甚至无法编译。在 where 条件中,第二个Equals应为方法调用:

 // instead of: jA.Roleid Equals ddlroleid.Selectedvalue
 jA.Roleid.Equals(ddlroleid.Selectedvalue)

此外,您在选择语句的最后一行还有不必要的逗号:

 // instead of: jA.checkbox,
 jA.checkbox

完整查询应如下所示:

from sm in db.SUB_MENUs
join a in db.AUTHORISATIONs 
    on sm.SUB_MENU_ID equals a.SUB_MENU_ID into joined_autho 
from jA in joined_autho.DefaultIfEmpty()
where sm.MENU_ID.Equals(ViewState["MenuId"]) &&
      jA.Roleid.Equals(ddlroleid.Selectedvalue)
select new
{
     sm.SUB_MENU_ID,
     sm.SUB_MENU_NAME,
     jA.checkbox
};

我相信您已正确标记了您的问题,这是Linq to SQL查询。

相关问题