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

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

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

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

[Update]

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

Ответы [ 6 ]

23 голосов
/ 15 сентября 2008

У меня была такая же проблема. Чтобы обойти это, я использовал событие 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);
}
13 голосов
/ 26 августа 2008

Да и Нет .

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

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

5 голосов
/ 24 октября 2012
protected void DocsData_Selecting(object sender, LinqDataSourceSelectEventArgs e)
{
    e.Arguments.MaximumRows = 5;
}
4 голосов
/ 16 марта 2011

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

protected void ldsLastEntries_Selecting(object sender, LinqDataSourceSelectEventArgs e)
{
    e.Arguments.MaximumRows = 10;
}
4 голосов
/ 15 сентября 2008

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

2 голосов
/ 07 августа 2008

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

SELECT TOP 3 FROM 

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...