LinqDataSource - можете ли вы ограничить количество возвращаемых записей?

Я хотел бы использовать элемент управления LinqDataSource на странице и ограничить количество возвращаемых записей. Я знаю, что если бы я использовал код, я мог бы сделать что-то вроде этого:

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

Кто-нибудь знает, возможно ли что-то подобное с управлением LinqDataSource?

[Обновлять]

Я собираюсь использовать LinqDataSource с элементом управления ListView, нет GridView или Repeater. Мастер LinqDataSource не позволяет ограничивать количество возвращаемых записей. Дополнительные параметры позволяют включать только операции удаления, вставки и обновления.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
35
0
22 974
6

Ответы 6

Я знаю, что если вы используете повторитель подкачки или gridview с linqdatasource, он автоматически оптимизирует количество возвращаемых результатов, но я также уверен, что в мастере источников данных вы можете перейти к расширенным параметрам и ограничить его до

SELECT TOP 3 FROM 

что должно позволить вам делать то, что вам нужно

да и Нет.

Нет, вы не можете ограничить результаты в элементе управления LinqDataSource. Поскольку Linq использует отложенное выполнение, ожидается, что элемент управления представлением будет выполнять ограничения набора записей.

да, вы можете сделать это с помощью элемента управления ListView. Уловка состоит в том, чтобы использовать элемент управления DataPager внутри LayoutTemplate, например:

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

Обычно вы включаете элементы управления в DataPager, такие как first, last, next и previous. Но если вы просто сделаете его пустым, вы увидите только три желаемых результата.

Надеюсь это поможет.

извините, у меня есть вопрос о вашем ответе. Если я воспользуюсь вашим решением, могу ли я сказать мне о весе страницы ?! LinqDataSource выбирает все записи, но ListView показывает только 3 записи. это такие накладные расходы на страницу?

Mehdi 05.07.2010 10:49

У меня была такая же проблема. Я решил использовать событие Selecting в LinqDataSource и вернуть результат вручную.

например

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

Вы можете основать свой запрос Linq на хранимой процедуре, которая возвращает только x количество строк с помощью оператора TOP. Помните, что то, что вы можете выполнять весь свой код БД в Linq, не означает, что вы должны это делать. Кроме того, вы можете указать Linq использовать тот же тип возвращаемого значения для хранимой процедуры, что и обычная таблица, поэтому все ваши привязки будут по-прежнему работать, а результаты возврата будут того же типа.

Вы можете поставить событие Selecting of LinqDataSource:

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

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

Добро пожаловать в Stack Overflow! Вместо того, чтобы просто публиковать блок кода, пожалуйста, объяснять, почему этот код решает поставленную проблему. Без объяснения причин это не ответ.

Martijn Pieters 24.10.2012 15:58

Другие вопросы по теме