2017-03-10 53 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

這是不是運行兩個查詢連接結果? –