Wie mache ich das
Select top 10 Foo from MyTable
in Linq zu SQL?
Wie mache ich das
Select top 10 Foo from MyTable
in Linq zu SQL?
Antworten:
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 auch davon ausgegangen, dass Foo eine Spalte in MyTable ist, die einem Eigenschaftsnamen zugeordnet wird.
Weitere Informationen finden Sie unter http://blogs.msdn.com/vbteam/archive/2008/01/08/converting-sql-to-linq-part-7-union-top-subqueries-bill-horst.aspx .
Verwenden Sie die Take-Methode :
var foo = (from t in MyTable
select t.Foo).Take(10);
In VB hat LINQ einen Take-Ausdruck:
Dim foo = From t in MyTable _
Take 10 _
Select t.Foo
Aus der Dokumentation:
Take<TSource>
zähltsource
Elemente auf und ergibt sie, biscount
Elemente ergeben wurden odersource
keine Elemente mehr enthalten. Wenncount
die Anzahl der Elemente in überschritten wirdsource
, werden alle Elemente vonsource
zurückgegeben.
Das OP erwähnte tatsächlich auch den Versatz, 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.
@ Janei: Mein erster Kommentar hier ist über deine Probe;)
Ich denke, wenn dir das gefällt, möchtest du 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 das Sortieren ganzer tbl_News nach absteigenden idNews und anschließendem Nehmen von 4
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.
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
};
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 aufzählen (dh bevor Sie es in einem foreach verwenden oder in eine Sammlung konvertieren), führt der Take dazu, dass der SQL-Operator "top n" an die Datenbank gesendet wird. Sie können dies sehen, wenn Sie den SQL-Profiler ausführen. Wenn Sie den Take nach dem Auflisten der Abfrage anwenden, geschieht dies auf dem Client, da LINQ die Daten aus der Datenbank abrufen musste, damit Sie sie auflisten können
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();
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();
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;
Zur limit 1
Verwendung von Methoden FirstOrDefault()
oder First()
.
Beispiel
var y = (from x in q select x).FirstOrDefault();