it-swarm.com.de

Was ist das Linq to SQL-Äquivalent zu TOP oder LIMIT / OFFSET?

Wie mache ich das

Select top 10 Foo from MyTable

in Linq zu SQL?

191
Herb Caudill

In VB:

from m in MyTable
take 10
select m.Foo

Dies setzt voraus, dass MyTable IQueryable implementiert. Möglicherweise müssen Sie über einen DataContext oder einen anderen Anbieter darauf zugreifen.

Es wird außerdem davon ausgegangen, dass Foo eine Spalte in MyTable ist, die einem Eigenschaftsnamen zugeordnet wird.

Siehe http://blogs.msdn.com/vbteam/archive/2008/01/08/converting-sql-to-linq-part-7-union-top-subqueries-bill-horst.aspx = für mehr Details.

143
David Alpert

Verwenden Sie die Take-Methode :

var foo = (from t in MyTable
           select t.Foo).Take(10);

In VB LINQ hat einen take-Ausdruck:

Dim foo = From t in MyTable _
          Take 10 _
          Select t.Foo

Aus der Dokumentation:

Take<TSource> zählt source auf und liefert Elemente, bis count Elemente geliefert wurden oder source keine Elemente mehr enthält. Wenn count die Anzahl der Elemente in source überschreitet, werden alle Elemente von source zurückgegeben.

247
Adam Lassek

Verwenden Sie die Take(int n) -Methode:

var q = query.Take(10);
33
amcoder

Das OP erwähnte eigentlich auch Offset, also zum Beispiel. Wenn Sie die Artikel von 30 bis 60 erhalten möchten, würden Sie Folgendes tun:

var foo = (From t In MyTable
       Select t.Foo).Skip(30).Take(30);

Verwenden Sie die Methode "Überspringen" für den Versatz.
Verwenden Sie die "Take" -Methode als Limit.

19
Inc33

@ Janei: mein erster Kommentar hier handelt von deiner Probe;)

Ich denke, wenn Sie dies tun, möchten Sie 4 nehmen und dann die Sortierung auf diese 4 anwenden.

var dados =  from d in dc.tbl_News.Take(4) 
                orderby d.idNews descending
                select new 
                {
                    d.idNews,
                    d.titleNews,
                    d.textNews,
                    d.dateNews,
                    d.imgNewsThumb
                };

Anders als ganze tbl_News nach idNews absteigend sortieren und dann 4 nehmen

var dados =  (from d in dc.tbl_News
                orderby d.idNews descending
                select new 
                {
                    d.idNews,
                    d.titleNews,
                    d.textNews,
                    d.dateNews,
                    d.imgNewsThumb
                }).Take(4);

nein ? Ergebnisse können unterschiedlich sein.

13
Yann

Das funktioniert gut in C #

var q = from m in MyTable.Take(10)
        select m.Foo
5
spdrcr911

Ich mag das:

 var dados =  from d in dc.tbl_News.Take(4) 
                orderby d.idNews descending

                select new 
                {
                    d.idNews,
                    d.titleNews,
                    d.textNews,
                    d.dateNews,
                    d.imgNewsThumb
                };
4
Janei Vieira

Ob der Take auf dem Client oder in der Datenbank stattfindet, hängt davon ab, wo Sie den Take-Operator anwenden. Wenn Sie es anwenden, bevor Sie die Abfrage auflisten (d. H. Bevor Sie es in einem foreach verwenden oder in eine Auflistung konvertieren), wird der SQL-Operator "top n" an die Datenbank gesendet. Sie können dies sehen, wenn Sie den SQL-Profiler ausführen. Wenn Sie den Take nach der Aufzählung der Abfrage anwenden, geschieht dies auf dem Client, da LINQ die Daten aus der Datenbank abrufen musste, damit Sie sie auflisten können

3
user124368

Sie würden die Take (N) -Methode verwenden.

3
FlySwat
Array oList = ((from m in dc.Reviews
                           join n in dc.Users on m.authorID equals n.userID
                           orderby m.createdDate descending
                           where m.foodID == _id                      
                           select new
                           {
                               authorID = m.authorID,
                               createdDate = m.createdDate,
                               review = m.review1,
                               author = n.username,
                               profileImgUrl = n.profileImgUrl
                           }).Take(2)).ToArray();
2
minhnguyen

Das Aufnehmen von Daten aus der Datenbank ohne Sortieren ist dasselbe wie das zufällige Aufnehmen

2
Anton

So hat es bei mir funktioniert:

var noticias = from n in db.Noticias.Take(6)
                       where n.Atv == 1
                       orderby n.DatHorLan descending
                       select n;
0
Gladson Reis

Ich musste die Take (n) -Methode verwenden und dann in eine Liste umwandeln. Arbeitete wie ein Zauber:

    var listTest = (from x in table1
                     join y in table2
                     on x.field1 equals y.field1
                     orderby x.id descending
                     select new tempList()
                     {
                         field1 = y.field1,
                         active = x.active
                     }).Take(10).ToList();
0
Apollo SOFTWARE

Verwenden Sie für limit 1 Die Methoden FirstOrDefault() oder First().

Beispiel

var y = (from x in q select x).FirstOrDefault();

0
display_name