2009-01-22 21 views
5

¿Hay alguna manera de realizar una consulta top (Take) linq usando porcentaje? El T-SQL habría sido:Versión LINQ de TOP PERCENT

SELECT TOP 20 PERCENT ... 

Pero parece que LINQ solo quiere un int.

Parece que tendría que hacer un recuento y luego una toma. ¿Alguna sugerencia?

Respuesta

4

Debería realizar la consulta dos veces, en esencia. Tendría que realizarlo una vez para obtener un conteo, y luego nuevamente calcular el porcentaje (porque pasará el número que corresponde al conteo que será igual al 20%).

+0

Eso es lo que estoy haciendo, y no me gusta:/Debe haber un método que se traduzca al SQL nativo. –

+1

@Basallo: Desafortunadamente, no creo que exista. Usted^podría^extender la implementación de IQueryable de alguna manera para respaldar su propio reemplazo de Top, que luego lo traduciría al comando SQL Server apropiado. – casperOne

+0

@tony: Una nota, aunque son 2 viajes, no es tan malo como parece. query.Count() se ejecuta como SELECT COUNT(), por lo que al menos no devuelve todas las filas, contando y luego seleccionando all nuevamente. Como dicen los demás, los procesos almacenados y las vistas serían otra forma de hacerlo ... – Daniel

1

No creo que haya nada integrado en LINQ to SQL. Podrías hacerlo con un procedimiento almacenado. No me gusta mucho, a menos que esté usando un procedimiento de todos modos, pero probablemente sea mejor que hacerlo con dos consultas separadas.

+0

Una vista probablemente sería más apropiada. –

Cuestiones relacionadas