Я хотел бы использовать элемент управления LinqDataSource на странице и ограничить количество возвращаемых записей. Я знаю, что если бы я использовал код, я мог бы сделать что-то вроде этого:
IEnumerable<int> values = Enumerable.Range(0, 10);
IEnumerable<int> take3 = values.Take(3);
Кто-нибудь знает, возможно ли что-то подобное с управлением LinqDataSource?
[Обновлять]
Я собираюсь использовать LinqDataSource с элементом управления ListView, нет GridView или Repeater. Мастер LinqDataSource не позволяет ограничивать количество возвращаемых записей. Дополнительные параметры позволяют включать только операции удаления, вставки и обновления.





Я знаю, что если вы используете повторитель подкачки или gridview с linqdatasource, он автоматически оптимизирует количество возвращаемых результатов, но я также уверен, что в мастере источников данных вы можете перейти к расширенным параметрам и ограничить его до
SELECT TOP 3 FROM
что должно позволить вам делать то, что вам нужно
да и Нет.
Нет, вы не можете ограничить результаты в элементе управления 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;
}
protected void DocsData_Selecting(object sender, LinqDataSourceSelectEventArgs e)
{
e.Arguments.MaximumRows = 5;
}
Добро пожаловать в Stack Overflow! Вместо того, чтобы просто публиковать блок кода, пожалуйста, объяснять, почему этот код решает поставленную проблему. Без объяснения причин это не ответ.
извините, у меня есть вопрос о вашем ответе. Если я воспользуюсь вашим решением, могу ли я сказать мне о весе страницы ?! LinqDataSource выбирает все записи, но ListView показывает только 3 записи. это такие накладные расходы на страницу?