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 控件是否可以实现类似的操作?

[更新]

我将使用LinqDataSourceListView 控件,不是 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 一起使用时,如何在页面的各种按钮单击事件上重新生成网格数据

linq怎么分页