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

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

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

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

[Обновить]

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

7.08.2008 00:45:51
6 ОТВЕТОВ

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

SELECT TOP 3 FROM 

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

2
7.02.2016 17:32:31

Да и нет .

Нет , вы не можете ограничить результаты в элементе управления 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. Но если вы просто сделаете его пустым, вы увидите только три результата, которые вы желаете.

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

13
27.12.2019 08:59:01
извините, у меня вопрос о вашем ответе. Если я воспользуюсь вашим решением, можете ли вы рассказать мне о весе страницы ?! LinqDataSource выбирает все записи, но ListView просто показывает 3 записи. это такие накладные расходы на странице?
Mehdi 5.07.2010 06:49:10

У меня была такая же проблема. Чтобы обойти это, я использовал событие 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);
}
24
15.09.2008 11:02:11

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

4
15.09.2008 11:21:34

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

protected void ldsLastEntries_Selecting(object sender, LinqDataSourceSelectEventArgs e)
{
    e.Arguments.MaximumRows = 10;
}
4
7.02.2016 17:32:20
protected void DocsData_Selecting(object sender, LinqDataSourceSelectEventArgs e)
{
    e.Arguments.MaximumRows = 5;
}
5
7.02.2016 17:31:56
Добро пожаловать в переполнение стека! Вместо того, чтобы только публиковать блок кода, пожалуйста, объясните, почему этот код решает поставленную проблему. Без объяснения это не ответ.
Martijn Pieters♦ 24.10.2012 11:58:02