Linq 中的简单左连接无法按预期工作
Simple Left join in Linq not working as expected
我想将以下查询转换为 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
预期结果是
我尝试了以下但没有得到想要的结果
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
没有上市
我认为这应该是:
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
子句。
Select 来自 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
});
我想将以下查询转换为 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
预期结果是
我尝试了以下但没有得到想要的结果
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
没有上市
我认为这应该是:
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
子句。
Select 来自 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
});