2017-03-10 47 views
0

我想要选择所有的行,其中假2是空的,所有的行与虚假2加入 下面的代码没有问题,但我想在选择LINQ查询提高效率。Linq加入返回的父母,即使当孩子为null

var rows = (
      from a in crmLinqContext.fakeSet 
      join b in crmLinqContext.fake2Set on a.fake2.Id equals b.Id 
      join c in crmLinqContext.fake3Set on b.field equals c.field 
      where c.anotherField == "THIS_BIT_OF_TEXT" 
      select a); 

List<myObject> objects = new List<myObject>(); 
foreach(var row in rows) 
{ 
    objects.Add(row); 
} 
rows = (
    from a in crmLinqContext.fakeSet 
    where s.fake2 == null 
    select a); 

foreach (var row in rows) 
{ 
    objects.Add(row); 
} 
return objects; 

回答

1

使用左连接在LINQ类似下面,它不是测试,但它的作用是,它左外连接fakeSet和fakeSet2。

var rows = 
    from a in crmLinqContext.fakeSet 
    join b in crmLinqContext.fake2Set on a.fake2.Id equals b.Id into subset 
    from b in subset.DefaultIfEmpty() 
    join c in crmLinqContext.fake3Set on b.field equals c.field 
    where c.anotherField == "THIS_BIT_OF_TEXT" 
    select a; 
0
var rows = (
      from a in crmLinqContext.fakeSet 
      join b in crmLinqContext.fake2Set on a.Id equals b.Id 
      join c in crmLinqContext.fake3Set on b.field equals c.field 
      where c.anotherField == "THIS_BIT_OF_TEXT" 
      select a) 
      .Concat(
      from a1 in crmLinqContext.fakeSet 
      where a1.fake2 == null 
      select a1); 
+0

这是不是运行两个查询连接结果? –