我想在页面上使用LinqDataSource控件并限制返回的记录数。 我知道如果我在后面使用代码,可以执行以下操作:
1 2
| IEnumerable<int> values = Enumerable.Range(0, 10);
IEnumerable<int> take3 = values.Take(3); |
有谁知道LinqDataSource控件是否可以实现这种功能?
[更新]
我将把LinqDataSource与ListView控件一起使用,而不是GridView或Repeater。 LinqDataSource向导不提供限制返回记录数的功能。"高级"选项仅允许您启用删除,插入和更新。
我有同样的问题。我解决这个问题的方法是在LinqDataSource上使用Selecting事件并手动返回结果。
例如
1 2 3 4 5 6 7
| 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控件执行此操作。诀窍是在LayoutTemplate中使用DataPager控件,如下所示:
1 2 3 4 5
| <LayoutTemplate>
</asp:DataPager>
</LayoutTemplate> |
通常,您将在DataPager中包含控件,例如first,last,next和Previous。但是,如果只是将其设为空,那么您只会看到所需的三个结果。
希望这可以帮助。
1 2 3 4
| protected void DocsData_Selecting(object sender, LinqDataSourceSelectEventArgs e)
{
e.Arguments.MaximumRows = 5;
} |
您可以将事件选择LinqDataSource:
1 2 3 4
| protected void ldsLastEntries_Selecting(object sender, LinqDataSourceSelectEventArgs e)
{
e.Arguments.MaximumRows = 10;
} |
您可以将Linq查询基于仅使用TOP语句仅返回x行数的存储proc。请记住,因为您可以在Linq中完成所有数据库代码,但这并不意味着您应该这样做。另外,您可以告诉Linq对存储的proc使用与普通表相同的返回类型,因此所有绑定仍将起作用,并且返回结果将为相同类型
我知道,如果您将分页转发器或gridview与linqdatasource一起使用,它将自动优化返回的结果数,但是我也很确定,在数据源向导中,您可以转到高级选项并将其限制为
应该可以让你做你需要的