Wie finde ich mit Linq to SQL Min und Max einer Spalte in einer Tabelle?

Möchte ich finden den schnellsten Weg, um die min und max einer Spalte in einer Tabelle mit einem einzigen Linq to SQL-Rundreise. Also ich weiß, das wäre in zwei Rundfahrten an:

int min = MyTable.Min(row => row.FavoriteNumber);
int max = MyTable.Max(row => row.FavoriteNumber);

Ich weiß, dass ich verwenden können group aber ich habe nicht ein group by Klausel, ich will Aggregat über den gesamten Tisch! Und ich kann es nicht verwenden .Min, ohne die Gruppierung zuerst. Ich habe versucht dies:

from row in MyTable 
group row by true into r 
select new { 
    min = r.Min(z => z.FavoriteNumber), 
    max = r.Max(z => z.FavoriteNumber) 
}

Aber, dass crazy group-Klausel scheint dumm, und die SQL macht es komplexer ist, als es sein muss.

So, gibt es eine Möglichkeit zu bekommen, die richtigen SQL aus?

EDIT: Diese Jungs versäumt zu: Linq to SQL: wie Aggregat ohne ein group by? ... lame Aufsicht durch LINQ-Designer, wenn es wirklich keine Antwort.

EDIT 2: ich sah meine eigene Lösung (mit der unsinnigen Konstante group by-Klausel im SQL Server Management Studio Ausführungsplan-Analyse, und es scheint mir, wie es ist identisch mit den plan-generiert von:

SELECT MIN(FavoriteNumber), MAX(FavoriteNumber)
FROM MyTable

so, es sei denn, jemand kann kommen mit einer einfacheren-oder-gleich-als-gute Antwort, ich denke, ich markieren Sie es als Antwort-von-mir. Gedanken?

Kommentar zu dem Problem
Warum die single-round-trip-Anforderung? Kommentarautor: Erik Forbes
Effizienz und Ordnung, -- es scheint, wie es sollte einfach sein, und die SQL ist das einfach: SELECT MIN(FavoriteNumber), MAX(FavoriteNumber) FROM MyTable... also die LINQ sollte es auch sein. Kommentarautor: Scott Stafford
Tool zum anzeigen, welche SQL-LINQ ist die Ausgabe: ayende.com/Blog/archive/2010/02/20/... Kommentarautor: Matt Ellen
Ich habe auch LinqPad umfassend, es zeigt sich auch SQL und ist sehr nützlich. Kommentarautor: Scott Stafford
"und die SQL macht es komplexer ist, als es sein muss" - das ist nicht ein problem von LINQ, aber die zugrunde liegenden LINQ-Provider, analysiert Ihre linq-Ausdruck und übersetzt Sie in SQL. LINQ definiert nur die Einschränkungen und Ergebnisse. Hatte der Anbieter analysiert und reduziert die Abfrage korrekt, dann wird die generierte SQL-wäre nur "wählen Sie min() max() aus X", genau wie die plan-analyzer gezeigt hat. Wenn Sie klobig SQL, denken Sie über den Wechsel Ihrer Anbieter-Bibliothek oder die Aktualisierung auf eine neuere version:)wie auch immer,die group-by-Konstante ist absolut gültige und richtige Art und Weise, drücken Sie Ihre gewünschte Abfrage. Kommentarautor: quetzalcoatl

InformationsquelleAutor der Frage Scott Stafford | 2010-02-15

Schreibe einen Kommentar