首页新闻招聘找找看知识库

linq join多条件问题

0
悬赏园豆:20 [已解决问题]
select * from A left join B on A.id=B.id
    left join C on A.id=C.id and C.name='abc'

这句SQL转换成LINQ该怎么写呀,主要是第二个join的两个条件不知道怎么处理了。

白菜、的主页 白菜、 | 初学一级 | 园豆:74
提问于:2017-06-21 15:41
< >
分享
最佳答案
0
                       from a in db.A
                       join b in db.B 
                       on a.Id equals b.Id into lb
                       from e in lb.DefaultIfEmpty()
                       join c in db.C . where c.Name == "abc"// where筛选要写到这里
                       on a.Id equals c.Id into lc
                       from f in lc.DefaultIfEmpty()
                    
                       select new
                       {
                           
                       };
收获园豆:20
黑峰 | 菜鸟二级 |园豆:468 | 2017-06-22 11:11
其他回答(4)
0

http://www.cnblogs.com/chear/archive/2012/12/28/2836822.html

 

不要客气

czd890 | 园豆:3910 (老鸟四级) | 2017-06-21 16:16

行不通啊,A表和C表必须同时有id和name两个字段才能那样写,我这个C.name='abc' 只是对C表自身的一个过滤。

白菜、 | 园豆:74 (初学一级) | 2017-06-21 16:29

@白菜、: 你可以吧你的 c.name=='abc' 放到where 中

czd890 | 园豆:3910 (老鸟四级) | 2017-06-21 17:34
0
  var query = from A in db.Set<A>()
              join B in db.Set<B>() on A.id equals B.id
              join C in db.Set<C>() on A.id equals C.id and       C.name='abc'
              where A.id >0 
              select  xx 字段 ?    
贫民窟大侠 | 园豆:3825 (老鸟四级) | 2017-06-21 16:46
0

先过滤C再把C当成一个集合不就行了(这是其中一个思路)

MrNice | 园豆:2067 (老鸟四级) | 2017-06-21 17:22
0
   var info = from a in db.A
                       join b in db.B on a.Id equals b.Id into lb
                       from b in lb.DefaultIfEmpty()
                       join c in db.C on a.Id equals c.Id into lc
                       from c in lc.DefaultIfEmpty()
                       where c.Name == "abc"
                       select new
                       {
                           //你要查的字段
                       };

c.name其实是可以放在where里的,结果一样。你要是觉得这样不好,那还可以分部写,先过滤c并放到集合,然后在联集合。

龙行天涯 | 园豆:1603 (小虾三级) | 2017-06-21 18:00
   您需要登录以后才能回答,未注册用户请先注册