LinqDataSource - 你能限制返回的记录数量吗?
Posted
技术标签:
【中文标题】LinqDataSource - 你能限制返回的记录数量吗?【英文标题】:LinqDataSource - Can you limit the amount of records returned? 【发布时间】:2010-09-05 11:25:35 【问题描述】:我想在页面上使用LinqDataSource
控件并限制返回的记录数量。我知道如果我使用后面的代码,我可以做这样的事情:
IEnumerable<int> values = Enumerable.Range(0, 10);
IEnumerable<int> take3 = values.Take(3);
有谁知道LinqDataSource
控件是否可以实现类似的操作?
[更新]
我将使用LinqDataSource
和ListView
控件,不是 GridView 或Repeater。 LinqDataSource
向导不提供限制返回记录数的功能。高级选项仅允许您启用删除、插入和更新。
【问题讨论】:
【参考方案1】:我也有同样的问题。我解决这个问题的方法是使用 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);
【讨论】:
【参考方案2】:是和否。
否,您不能将结果限制在 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。但如果你只是把它留空,那么你只会看到你想要的三个结果。
希望这会有所帮助。
【讨论】:
抱歉,我对您的回答有疑问。如果我使用您的解决方案,可以告诉我有关页面重量的信息吗?! LinqDataSource 选择所有记录,但 ListView 只显示 3 条记录。页面上有这么大的开销吗?【参考方案3】:protected void DocsData_Selecting(object sender, LinqDataSourceSelectEventArgs e)
e.Arguments.MaximumRows = 5;
【讨论】:
欢迎来到 Stack Overflow!不要只发布一段代码,请解释为什么这段代码可以解决所提出的问题。没有解释,这不是答案。【参考方案4】:您可以将 Linq 查询基于使用 TOP 语句仅返回 x 行的存储过程。请记住,仅仅因为您可以在 Linq 中执行所有数据库代码并不意味着您应该这样做。另外,您可以告诉 Linq 对存储过程使用与普通表相同的返回类型,因此您的所有绑定仍然有效,并且返回结果将是相同的类型
【讨论】:
【参考方案5】:你可以把LinqDataSource的事件选择:
protected void ldsLastEntries_Selecting(object sender, LinqDataSourceSelectEventArgs e)
e.Arguments.MaximumRows = 10;
【讨论】:
【参考方案6】:我知道,如果您将分页转发器或网格视图与 linqdatasource 一起使用,它将自动优化返回的结果数量,但我也很确定在数据源向导中您可以转到高级选项并将其限制为
SELECT TOP 3 FROM
这应该可以让你做你需要的事情
【讨论】:
以上是关于LinqDataSource - 你能限制返回的记录数量吗?的主要内容,如果未能解决你的问题,请参考以下文章
使用 Linqdatasource 和 groupby 属性
ASP.NET LinqDataSource WHERE 子句
GridView 控件中使用 LinqDataSource 和分页的总行数
关于LinqDataSource配置数据源在VS017环境下
当我们将 Telerik 网格与 LinqDataSource 一起使用时,如何在页面的各种按钮单击事件上重新生成网格数据