Question

J'aimerais utiliser un LinqDataSource contrôler sur une page et limiter le nombre d’enregistrements renvoyés.Je sais que si j'utilise le code derrière, je pourrais faire quelque chose comme ceci :

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

Est-ce que quelqu'un sait si quelque chose comme ça est possible avec un LinqDataSource contrôle?

[Mise à jour]

je vais utiliser le LinqDataSource avec le ListView contrôle, pas un GridView ou un répéteur.Le LinqDataSource L'assistant ne permet pas de limiter le nombre d'enregistrements renvoyés.Les options avancées vous permettent uniquement d'activer les suppressions, les insertions et les mises à jour.

Pas de solution correcte

Autres conseils

J'ai eu ce même problème.La façon dont j'ai contourné ce problème a été d'utiliser l'événement Selecting sur LinqDataSource et de renvoyer le résultat manuellement.

par exemple.

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);
}

Oui et Non.

Non, vous ne pouvez pas limiter les résultats dans le contrôle LinqDataSource.Étant donné que Linq utilise l'exécution différée, on s'attend à ce que le contrôle de présentation respecte les limites du jeu d'enregistrements.

Oui, vous pouvez le faire avec un contrôle ListView.L'astuce consiste à utiliser le Pageur de données contrôle au sein de Modèle de mise en page, ainsi:

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

Normalement, vous incluez des contrôles dans le DataPager comme premier, dernier, suivant et précédent.Mais si vous le videz simplement, vous ne verrez que les trois résultats que vous désirez.

J'espère que cela t'aides.

protected void DocsData_Selecting(object sender, LinqDataSourceSelectEventArgs e)
{
    e.Arguments.MaximumRows = 5;
}

Vous pouvez baser votre requête Linq sur un processus stocké qui ne renvoie qu'un nombre x de lignes à l'aide d'une instruction TOP.N'oubliez pas que ce n'est pas parce que vous pouvez faire tout votre code DB dans Linq que vous devriez le faire.De plus, vous pouvez demander à Linq d'utiliser le même type de retour pour le processus stocké que la table normale, ainsi toutes vos liaisons fonctionneront toujours et les résultats de retour seront du même type.

Vous pouvez mettre l'événement Sélection de LinqDataSource :

protected void ldsLastEntries_Selecting(object sender, LinqDataSourceSelectEventArgs e)
{
    e.Arguments.MaximumRows = 10;
}

Je sais que si vous utilisez un répéteur de pagination ou une grille avec linqdatasource, cela optimisera automatiquement le nombre de résultats renvoyés, mais je suis également presque sûr que dans l'assistant de source de données, vous pouvez accéder aux options avancées et le limiter à

SELECT TOP 3 FROM 

ce qui devrait vous permettre de faire ce dont vous avez besoin

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top