35

我想LinqDataSource在页面上使用控件并限制返回的记录数量。我知道如果我使用后面的代码,我可以做这样的事情:

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

有谁知道这样的事情是否可以通过LinqDataSource控制来实现?

[更新]

我将使用LinqDataSource控件ListView而不是GridView 或 Repeater。该LinqDataSource向导不提供限制返回记录数的功能。高级选项仅允许您启用删除、插入和更新。

4

6 回答 6

24

我有同样的问题。我解决这个问题的方法是使用 LinqDataSource 上的 Selecting 事件并手动返回结果。

例如

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);
}
于 2008-09-15T11:02:11.640 回答
13

,您不能将结果限制在 LinqDataSource 控件中。因为 Linq 使用延迟执行,所以预期是表示控件将执行记录集限制。

的,您可以使用 ListView 控件执行此操作。诀窍是在LayoutTemplate中使用DataPager控件,如下所示:

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

通常,您会在 DataPager 中包含控件,例如 first、last、next 和 previous。但如果你只是让它空着,那么你只会看到你想要的三个结果。

希望这可以帮助。

于 2008-08-26T03:08:30.663 回答
5
protected void DocsData_Selecting(object sender, LinqDataSourceSelectEventArgs e)
{
    e.Arguments.MaximumRows = 5;
}
于 2012-10-24T11:35:42.477 回答
4

您可以将 Linq 查询基于使用 TOP 语句仅返回 x 行的存储过程。请记住,仅仅因为您可以在 Linq 中完成所有数据库代码并不意味着您应该这样做。另外,您可以告诉 Linq 对存储过程使用与普通表相同的返回类型,因此您的所有绑定仍然有效,并且返回结果将是相同的类型

于 2008-09-15T11:21:34.353 回答
4

你可以把 LinqDataSource 的事件选择:

protected void ldsLastEntries_Selecting(object sender, LinqDataSourceSelectEventArgs e)
{
    e.Arguments.MaximumRows = 10;
}
于 2011-03-16T19:46:03.983 回答
2

我知道,如果您将分页转发器或 gridview 与 linqdatasource 一起使用,它将自动优化返回的结果数量,但我也很确定在数据源向导中您可以转到高级选项并将其限制为

SELECT TOP 3 FROM 

这应该可以让你做你需要的

于 2008-08-07T00:55:20.867 回答