【问题标题】:LinqDataSource - Can you limit the amount of records returned?LinqDataSource - 你能限制返回的记录数量吗?
【发布时间】: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 向导不提供限制返回记录数的功能。高级选项仅允许您启用删除、插入和更新。

【问题讨论】:

    标签: c# asp.net database linq linq-to-sql


    【解决方案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 
          

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2021-07-10
            • 1970-01-01
            • 1970-01-01
            • 2017-03-01
            • 2011-05-28
            • 2010-11-05
            • 1970-01-01
            • 2019-05-31
            相关资源
            最近更新 更多