2017-03-10 4 views
0

fake2がnullのすべての行とfake2の結合を持つすべての行を選択したい 以下のコードは問題ありませんが、すべてlinqクエリで実行したい効率を上げる。子がnullの場合でもLinq join parentを返す

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

結果を連結して2つのクエリを実行しませんか? –

関連する問題