LinqDataSource - você pode limitar a quantidade de registros retornados?

votos
28

Eu gostaria de usar um LinqDataSourcecontrole em uma página e limitar a quantidade de registros retornados. Eu sei que se eu usar o código por trás eu poderia fazer algo parecido com isto:

IEnumerable<int> values = Enumerable.Range(0, 10);
IEnumerable<int> take3 = values.Take(3);

Alguém sabe se algo como isso é possível com um LinqDataSourcecontrole?

[Atualizar]

Vou usar o LinqDataSourcecom o ListViewcontrole, não um GridView ou Repeater. O LinqDataSourceassistente não fornece a capacidade de limitar o número de retorno registros. As opções avançadas só permitem que você exclui habilitados, inserções e atualizações.

Publicado 07/08/2008 em 01:45
fonte usuário
Em outras línguas...                            


6 respostas

votos
22

Eu tive esse mesmo problema. A maneira que eu tenho rodada este era usar o evento Seleção na LinqDataSource e retornar o resultado manualmente.

por exemplo

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);
}
Respondeu 15/09/2008 em 12:02
fonte usuário

votos
12

Sim e Não .

Não , você não pode limitar os resultados dentro do controle LinqDataSource. Porque Linq usa execução adiada, a expectativa é de que o controle da apresentação fará os limites do conjunto de registros.

Sim , você pode fazer isso com um controle ListView. O truque é usar o DataPager controle dentro do LayoutTemplate , assim:

<LayoutTemplate>
  <div id="itemPlaceholder" runat="server" />
  <asp:DataPager ID="DataPager1" runat="server" PageSize="3">
  </asp:DataPager>            
</LayoutTemplate>

Normalmente, você poderia incluir controles dentro do DataPager como primeiro, último, seguinte, e anterior. Mas se você apenas torná-lo vazio, então você só vai ver os três resultados que você deseja.

Espero que isto ajude.

Respondeu 26/08/2008 em 04:08
fonte usuário

votos
4
protected void DocsData_Selecting(object sender, LinqDataSourceSelectEventArgs e)
{
    e.Arguments.MaximumRows = 5;
}
Respondeu 24/10/2012 em 12:35
fonte usuário

votos
3

Você pode colocar Seleção caso de LinqDataSource:

protected void ldsLastEntries_Selecting(object sender, LinqDataSourceSelectEventArgs e)
{
    e.Arguments.MaximumRows = 10;
}
Respondeu 16/03/2011 em 20:46
fonte usuário

votos
3

Você poderia basear sua consulta Linq em um proc armazenado que retorna apenas x número de linhas usando uma declaração TOP. Lembre-se apenas porque você pode fazer todo o seu código DB em Linq não significa que você deve. Além disso, você pode dizer Linq para usar o mesmo tipo de retorno para o proc armazenado como a tabela normal, por isso toda a sua ligação continuará a funcionar, e os resultados de retorno será o mesmo tipo

Respondeu 15/09/2008 em 12:21
fonte usuário

votos
1

Eu sei que se você usar um repetidor de paginação ou gridview com o linqdatasource ele vai otimizar automaticamente o número de resultados retornados, mas eu também tenho certeza que no assistente de fonte de dados que você pode ir para opções avançadas e limitá-lo a

SELECT TOP 3 FROM 

que deve permitir que você faça o que você precisa

Respondeu 07/08/2008 em 01:55
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more