LinqDataSource - Puteți să limitați cantitatea de înregistrări returnate?

Aș dori să folosesc un control LinqDataSource pe o pagină și să limitez cantitatea de înregistrări returnate. Știu dacă folosesc cod în spatele meu, aș putea să fac așa ceva:

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

Știe cineva dacă este posibil acest lucru cu un control LinqDataSource ?

[Update]

Voi folosi LinqDataSource cu comanda ListView , nu un GridView sau un Repeater. Expertul LinqDataSource nu oferă posibilitatea de a limita numărul de înregistrări returnate. Opțiunile avansate vă permit să permiteți ștergerea, inserarea și actualizarea.

0
fr hi bn

6 răspunsuri

Știu că dacă utilizați un repetor de paginare sau un gridview cu linqdatasource, acesta va optimiza în mod automat numărul de rezultate returnate, dar sunt, de asemenea, destul de sigur că în expertul cu resurse de date puteți merge la opțiunile avansate și puteți limita la

SELECT TOP 3 FROM 

care ar trebui să vă permită să faceți ceea ce aveți nevoie

0
adăugat

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" />
  
              

În mod normal, ați include controale în interiorul DataPager ca prima, ultima, următoarea și anterioară. Dar dacă tocmai l-ați golit, atunci veți vedea numai cele trei rezultate pe care le doriți.

Sper că acest lucru vă ajută.

0
adăugat
Îmi pare rău că am un Q despre răspunsul tău. Dacă folosesc soluția ta, poți să-mi spui despre pagina Greutate ?! LinqDataSource selectează toate înregistrările, dar ListView arată doar 3 înregistrări. este o astfel de cheltuială pe pagină?
adăugat autor mahdiahmadirad, sursa

Am avut aceeași problemă. Modul în care am reușit să folosesc evenimentul Selecting din LinqDataSource și să returnez rezultatul manual.

de exemplu.

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
adăugat

Ați putea baza interogarea dvs. Linq pe un proc stocat care returnează numai numărul de rânduri x folosind o instrucțiune TOP. Amintiți-vă doar pentru că puteți face tot codul dvs. DB în Linq nu înseamnă că ar trebui. În plus, puteți să-i spuneți lui Linq să utilizeze același tip de returnare pentru proc stocat ca și tabelul normal, astfel încât toate legăturile dvs. vor funcționa în continuare, iar rezultatele returnate vor fi de același tip

0
adăugat

Puteți pune evenimente Selectarea LinqDataSource:

protected void ldsLastEntries_Selecting(object sender, LinqDataSourceSelectEventArgs e)
{
    e.Arguments.MaximumRows = 10;
}
0
adăugat
Acesta este răspunsul!
adăugat autor Gabriel Graves, sursa
protected void DocsData_Selecting(object sender, LinqDataSourceSelectEventArgs e)
{
    e.Arguments.MaximumRows = 5;
}
0
adăugat
Puteți explica cum să utilizați codul dvs., unde să îl puneți?
adăugat autor Al2O3, sursa
Bine ați venit la stack overflow! Mai degrabă decât să publicați un bloc de cod, vă rugăm să explicați de ce acest cod rezolvă problema prezentată. Fără o explicație, acesta nu este un răspuns.
adăugat autor Martijn Pieters, sursa
Acesta este răspunsul!
adăugat autor Gabriel Graves, sursa