Подтвердить что ты не робот

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

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

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

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

[Обновление]

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

4b9b3361

Ответ 1

У меня была такая же проблема. Способ, которым я обходился, состоял в том, чтобы использовать событие 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);
}

Ответ 2

Да и Нет.

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

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

Ответ 3

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

Ответ 4

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

Ответ 5

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

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

Ответ 6

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

SELECT TOP 3 FROM 

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