LinqDataSource - 你能限制返回的记录数量吗?

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

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

有没有人知道如果这样的事情是可能的 LinqDataSource 控件?

[更新] </强>

我将 LinqDataSourceListView 控件一起使用,而不是 GridView或Repeater。 LinqDataSource 向导不提供限制记录返回数量的功能。高级选项仅允许您启用删除,插入和更新。

0

6 答案

我知道,如果您使用分页转发器或gridview与linqdatasource它会自动优化返回结果的数量,但我也很确定在数据源向导中,您可以转到高级选项并将其限制为

SELECT TOP 3 FROM 

这应该允许你做你需要的

0
额外

Yes and No.

No, you cannot limit the results within the LinqDataSource control. Because Linq uses deferred execution, the expectation is that the presentation control will do the recordset limits.

Yes, you can do this with a ListView control. The trick is to use the DataPager control within the LayoutTemplate, like so:


  <div id="itemPlaceholder" runat="server" />
  
              

通常情况下,您可以将控件包含在DataPager中,如first,last,next和previous。但是如果你只是把它弄空,那么你只会看到你想要的三个结果。

希望这可以帮助。

0
额外
对不起,我有关于你的答案的问答。如果我使用你的解决方案可以告诉我有关页面重量? LinqDataSource选择所有记录,但ListView只显示3条记录。这是页面上的开销吗?
额外 作者 mahdiahmadirad,

我有这个相同的问题。我这样做的方式是使用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);
}
0
额外

您可以将您的Linq查询基于只使用TOP语句返回x行数的存储过程。记住,因为你可以在Linq中做所有的DB代码并不意味着你应该这样做。另外,您可以告诉Linq使用与普通表相同的返回类型作为存储过程,因此所有绑定仍然可以工作,并且返回结果将是相同的类型

0
额外

你可以把事件选择LinqDataSource:

protected void ldsLastEntries_Selecting(object sender, LinqDataSourceSelectEventArgs e)
{
    e.Arguments.MaximumRows = 10;
}
0
额外
这是答案!
额外 作者 Gabriel Graves,
protected void DocsData_Selecting(object sender, LinqDataSourceSelectEventArgs e)
{
    e.Arguments.MaximumRows = 5;
}
0
额外
你能解释一下如何使用你的代码,把它放在哪里?
额外 作者 Al2O3,
欢迎来到堆栈溢出!请不要只发布一段代码,请解释为什么这段代码可以解决问题。没有解释,这不是一个答案。
额外 作者 Martijn Pieters,
这是答案!
额外 作者 Gabriel Graves,