LinqDataSource - 你能限制返回的记录数量吗?

时间:2008-08-07 00:45:52

标签: c# asp.net database linq linq-to-sql

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

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

有人知道使用LinqDataSource控件是否可以这样做吗?

[更新]

我将LinqDataSourceListView控件一起使用,使用GridView或Repeater。 LinqDataSource向导不提供限制返回记录数的功能。 “高级”选项仅允许您启用删除,插入和更新。

6 个答案:

答案 0 :(得分:23)

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

e.g。

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);
}

答案 1 :(得分:13)

,您无法限制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。但如果你把它弄空,那么你只会看到你想要的三个结果。

希望这有帮助。

答案 2 :(得分:5)

protected void DocsData_Selecting(object sender, LinqDataSourceSelectEventArgs e)
{
    e.Arguments.MaximumRows = 5;
}

答案 3 :(得分:4)

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

答案 4 :(得分:4)

您可以选择事件选择LinqDataSource:

protected void ldsLastEntries_Selecting(object sender, LinqDataSourceSelectEventArgs e)
{
    e.Arguments.MaximumRows = 10;
}

答案 5 :(得分:2)

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

SELECT TOP 3 FROM 

应该可以让你做你需要的事情