2009-01-22 7 views
5

Existe-t-il un moyen d'effectuer une requête linq supérieure (Take) en utilisant le pourcentage? Le T-SQL aurait été:Version LINQ de TOP PERCENT

SELECT TOP 20 PERCENT ... 

Mais LINQ semble vouloir seulement un int.

Il semble que je devrais faire un compte puis une prise. Aucune suggestion?

Répondre

4

Vous devriez effectuer la requête deux fois, essentiellement. Vous devrez l'exécuter une fois pour obtenir un compte, puis encore pour déterminer le pourcentage (parce que vous passerez le nombre qui correspond au compte qui sera égal à 20%).

+0

C'est ce que je fais, et je ne l'aime pas:/Il devrait y avoir une méthode qui se traduit par le SQL natif. –

+1

@Basallo: Malheureusement, je ne crois pas qu'il y a. Vous pourriez^étendre^l'implémentation IQueryable d'une manière ou d'une autre pour prendre en charge votre propre remplacement de Top, ce qui le traduirait ensuite vers la commande SQL Server appropriée. – casperOne

+0

@tony: Une note, même si c'est 2 voyages, ce n'est pas aussi grave que cela puisse paraître. query.Count() est exécuté en tant que SELECT COUNT(), donc au moins il ne retourne pas toutes les lignes, en comptant, puis en sélectionnant tout à nouveau. Comme les autres états, les procs et les vues stockées seraient une autre façon de faire ceci ... – Daniel

1

Je ne pense pas qu'il y ait quelque chose de intégré dans LINQ to SQL. Vous pouvez le faire avec une procédure stockée. Je n'aime pas beaucoup, sauf si vous utilisez une procédure de toute façon, mais c'est probablement mieux que de le faire avec deux requêtes distinctes.

+0

Une vue serait probablement plus appropriée. –