我想用一个 LinqDataSource 控制页面并限制返回的记录数量。我知道如果我使用后面的代码我可以做这样的事情:

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

有谁知道这样的事情是否可以通过 LinqDataSource 控制?

[更新]

我将使用 LinqDataSourceListView 控制, 不是 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 

这应该可以让你做你需要做的事情

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top