【问题标题】:LINQ to SQL Left Join over Left Join c#LINQ to SQL 左连接优于左连接 c#
【发布时间】: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


【解决方案1】:

问题在于 s.lkpid = lt1.id 而 s 为空。尝试像下面那样放置 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();

如果对您有帮助,请将帖子标记为已回答

【讨论】:

  • 太棒了!...连接之间的 where 子句,它为我解决了这个问题!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多