LinqDataSource - 可以限制返回的记录数量吗?
-
08-06-2019 - |
题
我想用一个 LinqDataSource
控制页面并限制返回的记录数量。我知道如果我使用后面的代码我可以做这样的事情:
IEnumerable<int> values = Enumerable.Range(0, 10);
IEnumerable<int> take3 = values.Take(3);
有谁知道这样的事情是否可以通过 LinqDataSource
控制?
[更新]
我将使用 LinqDataSource
与 ListView
控制, 不是 GridView 或 Repeater。这 LinqDataSource
向导不提供限制返回记录数量的功能。高级选项仅允许您启用删除、插入和更新。
没有正确的解决方案
其他提示
我也有同样的问题。我解决这个问题的方法是使用 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);
}
是的 和 不.
不, ,您无法限制 LinqDataSource 控件内的结果。由于 Linq 使用延迟执行,因此期望表示控件将执行记录集限制。
是的, ,您可以使用 ListView 控件来完成此操作。诀窍是使用 数据寻呼机 控制在 布局模板, ,像这样:
<LayoutTemplate>
<div id="itemPlaceholder" runat="server" />
<asp:DataPager ID="DataPager1" runat="server" PageSize="3">
</asp:DataPager>
</LayoutTemplate>
通常,您会在 DataPager 中包含控件,例如第一个、最后一个、下一个和上一个。但如果你只是将其清空,那么你只会看到你想要的三个结果。
希望这可以帮助。
protected void DocsData_Selecting(object sender, LinqDataSourceSelectEventArgs e)
{
e.Arguments.MaximumRows = 5;
}
您可以将 Linq 查询基于使用 TOP 语句仅返回 x 行数的存储过程。请记住,仅仅因为您可以在 Linq 中执行所有数据库代码并不意味着您应该这样做。另外,您可以告诉 Linq 对存储过程使用与普通表相同的返回类型,因此所有绑定仍然有效,并且返回结果将是相同的类型
您可以放置 LinqDataSource 的事件 Selecting:
protected void ldsLastEntries_Selecting(object sender, LinqDataSourceSelectEventArgs e)
{
e.Arguments.MaximumRows = 10;
}
我知道,如果您将分页转发器或 gridview 与 linqdatasource 一起使用,它会自动优化返回的结果数量,但我也很确定在数据源向导中您可以转到高级选项并将其限制为
SELECT TOP 3 FROM
这应该可以让你做你需要做的事情