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

голоса
28

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

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

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

[Обновить]

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

Задан 07/08/2008 в 01:45
источник пользователем
На других языках...                            


6 ответов

голоса
22

У меня была такая же проблема. Так я обходил это использовать событие 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);
}
Ответил 15/09/2008 в 12:02
источник пользователем

голоса
12

Да и Нет .

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

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

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

Как правило, вы должны включить элементы управления внутри DataPager как первый, последний, следующий, и предыдущий. Но если вы просто сделать его пустым, то вы увидите только три результата, которые вы хотите.

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

Ответил 26/08/2008 в 04:08
источник пользователем

голоса
4
protected void DocsData_Selecting(object sender, LinqDataSourceSelectEventArgs e)
{
    e.Arguments.MaximumRows = 5;
}
Ответил 24/10/2012 в 12:35
источник пользователем

голоса
3

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

protected void ldsLastEntries_Selecting(object sender, LinqDataSourceSelectEventArgs e)
{
    e.Arguments.MaximumRows = 10;
}
Ответил 16/03/2011 в 20:46
источник пользователем

голоса
3

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

Ответил 15/09/2008 в 12:21
источник пользователем

голоса
1

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

SELECT TOP 3 FROM 

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

Ответил 07/08/2008 в 01:55
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more