2008-08-07 98 views
27

我想在頁面上使用LinqDataSource控件並限制返回的記錄數量。我知道如果我使用的代碼後面我會做這樣的事情:LinqDataSource - 你能限制返回的記錄數量嗎?

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

有誰知道,如果這樣的事情是可能的一個LinqDataSource控制?

[更新]

我要與ListView控制使用LinqDataSource一個GridView或中繼器。 LinqDataSource嚮導不提供限制記錄返回數量的功能。高級選項僅允許您啓用刪除,插入和更新。

回答

1

我知道如果您使用分頁轉發器或gridview與linqdatasource它會自動優化返回結果的數量,但我也非常確定在數據源嚮導中,您可以轉到高級選項並將其限制爲

SELECT TOP 3 FROM 

這應該讓你做什麼你需要

12

沒有

,您不能限制LinqDataSource控件中的結果。因爲Linq使用延期執行,期望的是演示文稿控件將執行記錄集限制。

是的,你可以用ListView控件做到這一點。訣竅是使用LayoutTemplateDataPager控制,就像這樣:

<LayoutTemplate> 
    <div id="itemPlaceholder" runat="server" /> 
    <asp:DataPager ID="DataPager1" runat="server" PageSize="3"> 
    </asp:DataPager>    
</LayoutTemplate> 

通常情況下,你將包括DataPager的像第一內部控制,最後,下一個,和以前。但是如果你只是把它弄空,那麼你只會看到你想要的三個結果。

希望這會有所幫助。

+1

對不起,我有一個關於你的答案Q值。如果我使用你的解決方案可以告訴我有關頁面重量? LinqDataSource選擇所有記錄,但ListView只顯示3條記錄。這是頁面上的開銷嗎? – mahdiahmadirad 2010-07-05 06:49:10

22

我有這個相同的問題。我這樣做的方式是使用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); 
} 
3

你可以立足於一個存儲過程,只有返回使用TOP語句x行數你的Linq查詢。記住,因爲你可以在Linq中做所有的DB代碼並不意味着你應該。此外,您可以告訴Linq使用與普通表相同的返回類型,因此所有綁定仍然可以工作,並且返回結果將是相同的類型

3

您可以將事件選擇爲LinqDataSource:

protected void ldsLastEntries_Selecting(object sender, LinqDataSourceSelectEventArgs e) 
{ 
    e.Arguments.MaximumRows = 10; 
} 
+0

這就是答案! – 2013-03-24 22:13:42

4
protected void DocsData_Selecting(object sender, LinqDataSourceSelectEventArgs e) 
{ 
    e.Arguments.MaximumRows = 5; 
} 
+0

歡迎來到Stack Overflow!請不要只發布一段代碼,請*解釋*爲什麼這段代碼能解決問題。沒有解釋,這不是一個答案。 – 2012-10-24 11:58:02