c# - total - LinqDataSource-¿Puede limitar la cantidad de registros devueltos?
sql cantidad registros (6)
Puede basar su consulta Linq en un proceso almacenado que solo devuelve x número de filas usando una instrucción TOP. Recuerde que solo porque puede hacer todo su código DB 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, de modo que toda su vinculación seguirá funcionando, y los resultados de devolución serán del mismo tipo.
Me gustaría utilizar un control LinqDataSource
en una página y limitar la cantidad de registros devueltos. Sé que si uso el código, podría hacer algo como esto:
IEnumerable<int> values = Enumerable.Range(0, 10);
IEnumerable<int> take3 = values.Take(3);
¿Alguien sabe si algo así es posible con un control LinqDataSource
?
[Actualizar]
Voy a utilizar LinqDataSource
con el control ListView
, no un GridView o Repeater. El asistente LinqDataSource
no proporciona la capacidad de limitar el número de registros devueltos. Las opciones avanzadas solo le permiten habilitar eliminaciones, inserciones y actualizaciones.
Tuve el mismo problema. La forma en que solucioné esto fue usar el evento Selecting 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 la ejecución diferida, la expectativa es que el control de la presentación cumpla con los límites del conjunto de registros.
Sí , puedes hacer esto con un control ListView. El truco es usar el control DataPager dentro de LayoutTemplate , así:
<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 haces vacío, solo verás los tres resultados que deseas.
Espero que esto ayude.
Puede 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 el linqdatasource, optimizará automáticamente el número 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
que debería permitirle hacer lo que necesita
protected void DocsData_Selecting(object sender, LinqDataSourceSelectEventArgs e)
{
e.Arguments.MaximumRows = 5;
}