关于c#:LinqDataSource-您可以限制返回的记录量吗?

关于c#:LinqDataSource-您可以限制返回的记录量吗?

LinqDataSource - Can you limit the amount of records returned?

我想在页面上使用LinqDataSource控件并限制返回的记录数。 我知道如果我在后面使用代码,可以执行以下操作:

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

有谁知道LinqDataSource控件是否可以实现这种功能?

[更新]

我将把LinqDataSourceListView控件一起使用,而不是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一起使用,它将自动优化返回的结果数,但是我也很确定,在数据源向导中,您可以转到高级选项并将其限制为

1
SELECT TOP 3 FROM

应该可以让你做你需要的


推荐阅读