[英]LINQ to SQL Left Join over Left Join c#
我試圖對現有的左聯接執行左聯接,因為這是一個查找表。
就像是:
(from m in maintablerepository.AsQueryable()
join st1 in subtable1repository.AsQuerable on
m.id = s1.id into grps1
from s in grps1.DefaultIfEmpty()
join lt1 in lookuptablerepository.AsQuerable on
s.lkpid = lt1.id into grplt1
from lkp in grplt1.DefaultIfEmpty()
select new {
prop1 = m.prop1,
prop2 = s.prop2,
prop3 = lkp.prop3
}).ToList();
問題是,盡管子表中沒有匹配的值,但當我刪除查找表上的左聯接時,此查詢運行良好。
但是,將其放回原位會導致“未設置對象引用”錯誤。
我什至嘗試了以下方法,但沒有成功:
(from m in maintablerepository.AsQueryable()
join st1 in subtable1repository.AsQuerable on
m.id = s1.id into grps1
from s in grps1.DefaultIfEmpty()
join lt1 in lookuptablerepository.AsQuerable on
s.lkpid = lt1.id into grplt1
from lkp in grplt1.DefaultIfEmpty()
where s!=null && lkp!=null
select new {
prop1 = m.prop1,
prop2 = (s==null)?string.Empty:s.prop2,
prop3 = (lkp==null)?string.Empty:lkp.prop3
}).ToList();
如果第一個左連接結果為null,那么另一個將如何對其進行連接?
問題在於s.lkpid = lt1.id,其中s為null。 嘗試將s!= null放置如下
(from m in maintablerepository.AsQueryable() join st1 in subtable1repository.AsQuerable on m.id = s1.id into grps1 from s in grps1.DefaultIfEmpty() where s!=null join lt1 in lookuptablerepository.AsQuerable on s.lkpid = lt1.id into grplt1 from lkp in grplt1.DefaultIfEmpty() where lkp!=null select new { prop1 = m.prop1, prop2 = (s==null)?string.Empty:s.prop2, prop3 = (lkp==null)?string.Empty:lkp.prop3 }).ToList();
如果有幫助,請標記為已回答
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.