【发布时间】:2015-06-20 13:04:38
【问题描述】:
我正在尝试对现有的左连接执行左连接,因为这是一个查找表。
类似:
(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();
如果第一个左连接结果为空,如何对其进行另一个连接?
【问题讨论】:
-
我确信这是可以做到的,但是,为什么不把它分成两个或更多的后期绑定查询呢?速度相同,代码可读性更强。
-
你的意思是在第一个查询中查询直到子表 1,然后在另一个查询中加入查找表,最后做一个 tolist 来生成查询?
标签: c# join linq-to-sql left-join