2016-08-03 10 views
1

diese Abfrage vor:Die verschachtelte Abfrage wird nicht unterstützt: Entity Framework nicht auf gruppierte linken Joins

from e in db.MyEntities 

join o in db.MyOtherEntities 
on new e.Foo equals o.Foo into others 
from o in others.DefaultIfEmpty() 

select new 
{ 
    Value1 = e.Value1, 
    Value2 = o.Value2 
}; 

Mit diesem einfachen LEFT JOIN, Entity Framework nicht

from e in query group e by new { } into g select g.Count() 

die folgende Gruppe auf zu tun, dass mag obskur erscheinen, aber es ist eine übliche Sache für automatische Grid-Implementierungen, mit Ihren Abfragen umzugehen.

Ich fand diese mit der Datenbibliothek von DevExtreme: Total Zusammenfassungen würde nicht für Abfragen mit linken Joins funktionieren.

Was man bekommt, ist ein

NotSupportedException: The nested query is not supported. Operation1='GroupBy' Operation2='MultiStreamNest' 

Dies obwohl funktioniert:

from e in query.Take(1) select { Count = query.Count(), /* other aggregates */ } 

Und so tut dies:

from e in query group e by e.SomePropertyThatsActuallyConstant into g select g.Count() 
+0

"nicht die Mühe zu beantworten" ist nicht eine gute Sache zu schreiben, es ist nichts falsch mit anderen Menschen ihre eigenen Antworten hinzufügen, auch wenn Sie beabsichtigen, sich selbst zu beantworten. – DavidG

+0

Was kann ich sagen, ich bin ein böser Typ. – John

Antwort

1

es eine Abhilfe ist. Sie können Ihre Abfrage wie folgt schreiben:

from e in db.MyEntities 

from o in db.MyOtherEntities.Where(o => o.Foo == e.Foo).DefaultIfEmpty() 

select new 
{ 
    Value1 = e.Value1, 
    Value2 = o.Value2 
}; 

Seltsamer es funktioniert auch, wenn Sie eine where-Klausel nach dem setzen beitreten:

from e in db.MyEntities 

join o in db.MyOtherEntities 
on new e.Foo equals o.Foo into others 
from o in others.DefaultIfEmpty() 

where e.Value1 == e.Value1 

select new 
{ 
    Value1 = e.Value1, 
    Value2 = o.Value2 
}; 

Die Klausel where Bedingung nicht nur Konstanten sein müssen, ich denke, EF ist schlau genug, um es sonst zu reduzieren.

Verwandte Themen