LinqDataSource - Можете ли вы ограничить количество возвращаемых записей?
Я хотел бы использовать LinqDataSource
контролировать на странице и ограничить количество возвращаемых записей. Я знаю, если бы я использовал код позади, я мог бы сделать что-то вроде этого:
IEnumerable<int> values = Enumerable.Range(0, 10);
IEnumerable<int> take3 = values.Take(3);
Кто-нибудь знает, возможно ли что-то подобное с LinqDataSource
контроль?
[Обновить]
Я собираюсь использовать LinqDataSource
с ListView
контроль, а не GridView или повторитель. LinqDataSource
Мастер не дает возможности ограничить количество возвращаемых записей. Дополнительные параметры позволяют только включить удаление, вставки и обновления.
6 ответов
У меня была такая же проблема. Чтобы обойти это, я использовал событие 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);
}
Да и нет.
Нет, вы не можете ограничить результаты в элементе управления 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. Но если вы просто сделаете его пустым, вы увидите только три результата, которые вы желаете.
Надеюсь это поможет.
protected void DocsData_Selecting(object sender, LinqDataSourceSelectEventArgs e)
{
e.Arguments.MaximumRows = 5;
}
Вы можете основывать свой запрос Linq на хранимой процедуре, которая возвращает только x строк, используя оператор TOP. Помните, только потому, что вы можете делать весь свой код БД в Linq, не значит, что вы должны это делать. Кроме того, вы можете указать Linq использовать тот же тип возврата для хранимого процесса, что и для обычной таблицы, так что вся ваша привязка будет работать, а результаты возврата будут одного типа.
Вы можете поставить событие Выборка LinqDataSource:
protected void ldsLastEntries_Selecting(object sender, LinqDataSourceSelectEventArgs e)
{
e.Arguments.MaximumRows = 10;
}
Я знаю, что если вы используете пейджинговый ретранслятор или gridview с linqdatasource, он автоматически оптимизирует количество возвращаемых результатов, но я также уверен, что в мастере источника данных вы можете перейти к дополнительным параметрам и ограничить их до
SELECT TOP 3 FROM
что должно позволить вам делать то, что вам нужно