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 { };
http://www.cnblogs.com/chear/archive/2012/12/28/2836822.html
不要客气
行不通啊,A表和C表必须同时有id和name两个字段才能那样写,我这个C.name='abc' 只是对C表自身的一个过滤。
@白菜、: 你可以吧你的 c.name=='abc' 放到where 中
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 字段 ?
先过滤C再把C当成一个集合不就行了(这是其中一个思路)
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并放到集合,然后在联集合。
join后面语法提示必须跟on 这里直接写where会报错,有什么方法解决吗