2015-11-14 2 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 

DesignationID идет в left join состоянии, ParetID идет к where пункта.

Выберите из 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

Смежные вопросы