我想在页面上使用LinqDataSource
控件并限制返回的记录数量。我知道如果我使用代码,我可以做这样的事情:
IEnumerable<int> values = Enumerable.Range(0, 10);
IEnumerable<int> take3 = values.Take(3);
有人知道使用LinqDataSource
控件是否可以这样做吗?
[更新]
我将LinqDataSource
与ListView
控件一起使用,不使用GridView或Repeater。 LinqDataSource
向导不提供限制返回记录数的功能。 “高级”选项仅允许您启用删除,插入和更新。
答案 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
应该可以让你做你需要的事情