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

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

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

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

[Обновлять]

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

Ответов (6)

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

SELECT TOP 3 FROM 

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

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

Да и нет .

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

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

У меня была такая же проблема. Я решил использовать событие 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;
}