LinqDataSource: ¿puede limitar la cantidad de registros devueltos?
-
08-06-2019 - |
Pregunta
Me gustaría usar un LinqDataSource
controlar una página y limitar la cantidad de registros devueltos.Sé que si uso el código subyacente podría hacer algo como esto:
IEnumerable<int> values = Enumerable.Range(0, 10);
IEnumerable<int> take3 = values.Take(3);
¿Alguien sabe si algo como esto es posible con un LinqDataSource
¿control?
[Actualizar]
voy a usar el LinqDataSource
con el ListView
control, no un GridView o un repetidor.El LinqDataSource
El asistente no ofrece la posibilidad de limitar el número de registros que se devuelven.Las opciones avanzadas solo le permiten habilitar eliminaciones, inserciones y actualizaciones.
No hay solución correcta
Otros consejos
Tuve el mismo problema.La forma en que solucioné esto fue usar el evento de selección en LinqDataSource y devolver el resultado manualmente.
p.ej.
protected void lnqRecentOrder_Selecting(object sender, LinqDataSourceSelectEventArgs e)
{
DataClassesDataContext dx = new DataClassesDataContext();
e.Result = (from o in dx.Orders
where o.CustomerID == Int32.Parse(Request.QueryString["CustomerID"])
select o).Take(5);
}
Sí y No.
No, no puede limitar los resultados dentro del control LinqDataSource.Debido a que Linq usa ejecución diferida, la expectativa es que el control de presentación cumpla con los límites del conjunto de registros.
Sí, puedes hacer esto con un control ListView.El truco consiste en utilizar el Buscapersonas de datos control dentro del Plantilla de diseño, al igual que:
<LayoutTemplate>
<div id="itemPlaceholder" runat="server" />
<asp:DataPager ID="DataPager1" runat="server" PageSize="3">
</asp:DataPager>
</LayoutTemplate>
Normalmente, incluiría controles dentro del DataPager como primero, último, siguiente y anterior.Pero si lo deja vacío, sólo verá los tres resultados que desea.
Espero que esto ayude.
protected void DocsData_Selecting(object sender, LinqDataSourceSelectEventArgs e)
{
e.Arguments.MaximumRows = 5;
}
Puede basar su consulta de Linq en un proceso almacenado que solo devuelve x número de filas usando una declaración TOP.Recuerde que sólo porque pueda hacer todo su código de base de datos en Linq no significa que deba hacerlo.Además, puede decirle a Linq que use el mismo tipo de devolución para el proceso almacenado que la tabla normal, por lo que todos sus enlaces seguirán funcionando y los resultados devueltos serán del mismo tipo.
Puedes poner evento Selección de LinqDataSource:
protected void ldsLastEntries_Selecting(object sender, LinqDataSourceSelectEventArgs e)
{
e.Arguments.MaximumRows = 10;
}
Sé que si usa un repetidor de paginación o una vista de cuadrícula con linqdatasource, optimizará automáticamente la cantidad de resultados devueltos, pero también estoy bastante seguro de que en el asistente de fuente de datos puede ir a opciones avanzadas y limitarlo a
SELECT TOP 3 FROM
lo que debería permitirle hacer lo que necesita