2015-11-14 21 views
1

我想下面的查詢轉換到LINQ簡單的左Linq中加入未正常工作

select m.Id,m.MenuName,mr.CanAdd,mr.CanDelete,mr.CanEdit 
from Menu m 
left join MenuRole mr on m.Id=mr.MenuID 
and mr.DesignationID=1 where m.ParentID<>0 

預期結果爲:

enter image description here

我曾嘗試以下,但沒有得到期望的結果

var test = (from m in _db.Menus 
        join mr in _db.MenuRoles on m.Id equals mr.MenuID into t 
        from rt in t.Where(x=>x.Menu.ParentID!=0).DefaultIfEmpty() 
        where rt.DesignationID==1 
        orderby m.Id 
        select new MenuVM 
        { 
         CanAdd=rt.CanAdd==null?false:true, 
         CanEdit=rt.CanEdit==null?false:true, 
         CanDelete=rt.CanDelete==null?false:true, 
         MenuId=rt.Menu.Id, 
         MenuName=rt.Menu.MenuName      
        }); 

問題是Employee data沒有上市

回答

2

我相信這應該是:

from m in _db.Menus 
join mr in _db.MenuRoles on m.Id equals mr.MenuID into t 
from rt in t.Where(x=>x.DesignationID==1).DefaultIfEmpty() 
where m.ParentID!=0 

DesignationIDleft join條件,ParetIDwhere條款。

選擇從m

select new MenuVM 
{ 
    CanAdd=rt.CanAdd==null?false:true, 
    CanEdit=rt.CanEdit==null?false:true, 
    CanDelete=rt.CanDelete==null?false:true, 
    MenuId=m.Id, 
    MenuName=m.MenuName      
}); 
+0

燁搭檔感謝它的工作.. – ksg