2009-01-22 6 views
5

Gibt es eine Möglichkeit, eine top (Take) linq-Abfrage mit Prozentsatz durchzuführen? Der T-SQL wäre gewesen:LINQ-Version von TOP PERCENT

SELECT TOP 20 PERCENT ... 

Aber LINQ scheint nur int. Zu wollen.

Es scheint, dass ich eine Zählung und dann eine Aufnahme machen müsste. Irgendwelche Vorschläge?

Antwort

4

Sie müssten die Abfrage im Wesentlichen zweimal durchführen. Sie müssen es einmal ausführen, um eine Zählung zu erhalten, und dann erneut, um den Prozentsatz herauszufinden (weil Sie die Zahl übergeben werden, die der Zählung entspricht, die 20% entspricht).

+0

Das ist, was ich tue, und ich mag es nicht:/Es sollte eine Methode geben, die in das native SQL übersetzt. –

+1

@Basallo: Leider glaube ich nicht, dass es da ist. Sie könnten die IQueryable-Implementierung irgendwie erweitern, um Ihr eigenes Override von Top zu unterstützen, das es dann in den entsprechenden SQL Server-Befehl übersetzen würde. – casperOne

+0

@tony: Eine Anmerkung, obwohl es 2 Reisen ist, ist es nicht so schlimm, wie es scheinen mag. query.Count() wird als SELECT COUNT() ausgeführt, so dass zumindest nicht alle Zeilen zurückgegeben, gezählt und dann alle erneut ausgewählt werden. Wie die anderen sagen, wären gespeicherte Procs und Views eine andere Möglichkeit, dies zu tun ... – Daniel

1

Ich glaube nicht, dass in LINQ to SQL etwas eingebaut ist. Sie könnten es mit einer gespeicherten Prozedur tun. Ich mag nicht so viel, es sei denn, du verwendest sowieso eine Prozedur, aber es ist wahrscheinlich besser, als es mit zwei separaten Abfragen zu tun.

+0

Eine Ansicht wäre wahrscheinlich angemessener. –