2016-04-06 8 views
0

derzeit Ich habe zwei querys, die die gleiche komplexe Abfrage zu teilen, die ich nur einmal ausgeführt werden soll:auf einem anderen where-Klausel für jedes Objekt

//Query 1 
from together in (...) // ... = Complex query with multiple joins 
where together.property == 0 
select new { ... } 

//Query 2 
from together in (...) // ... = Complex query with multiple joins 
where together.property > 0 
select new { ... } 

Das Problem ist, dass sie haben eine andere where-Klausel. Ich versuchte, die where-Klausel in der select-Anweisung zu setzen, aber dies scheint nur möglich zu sein, wenn ich groupby verwenden, die ich nicht brauche hier:

//Don't work 
from together in (...) // ... = Complex query with multiple joins 
select new { 
    //if together would be grouped, this would work. However I need all data without grouping 
    //   . Together is not IQueryable so this does not work 
    Foo = together.Where(e => e.property == 0).Select(...), 
    Bar = together.Where(e => e.property > 0).Select(...) 
} 

Ist es möglich, zwei Objekte zu erhalten, basierend auf einem anderen where-Klausel in einer Abfrage mit LINQ?

+0

ist es ein 'DoesNotWorkException' werfen? –

+0

'zusammen' ist nicht 'IQueryable' in' wählen Sie neue' @SamIam –

+0

Sind die Abfrage1/2 auch die gleichen? –

Antwort

1

Sie fragen konnten sie alle, und teilen Sie sie dann nach oben, wie dieser

var qry= (
    from together in (...) // ... = Complex query with multiple joins 
    where together.property => 0 
    select together) 
    .ToList(); 

var result = new { 
    Foo = qry.Where(e => e.property == 0).Select(...), 
    Bar = qry.Where(e => e.property > 0).Select(...) 
}; 
+0

Dies wäre eine Lösung, danke. Aber ich habe es mit einer großen Menge von Daten zu tun. Glauben Sie, dass dies nur mit übersetzter SQL möglich wäre? –

+0

@ChristianGollhardt Was werden Sie mit dem Ergebnis dieser Abfrage tun, nachdem Sie es erstellt haben? Wenn Sie die gesamte Sache trotzdem sofort abfragen, sollte dieser Ansatz keine neuen Performance-Bedenken aufwerfen. –

+0

@ChristianGollhardt wenn '.Select (...)' nur eine kleine Teilmenge auswählt, die die Leistung beeinträchtigen könnte. Ist es möglich, auszuwählen, bevor Sie die Eigenschaft prüfen? –

Verwandte Themen