Comment puis-je faire cela
Select top 10 Foo from MyTable
de Linq à SQL?
Comment puis-je faire cela
Select top 10 Foo from MyTable
de Linq à SQL?
Réponses:
En VB:
from m in MyTable
take 10
select m.Foo
Cela suppose que MyTable implémente IQueryable. Vous devrez peut-être y accéder via un DataContext ou un autre fournisseur.
Il suppose également que Foo est une colonne de MyTable qui est mappée sur un nom de propriété.
Voir http://blogs.msdn.com/vbteam/archive/2008/01/08/converting-sql-to-linq-part-7-union-top-subqueries-bill-horst.aspx pour plus de détails.
Utilisez la méthode Take :
var foo = (from t in MyTable
select t.Foo).Take(10);
Dans VB LINQ a une expression de prise:
Dim foo = From t in MyTable _
Take 10 _
Select t.Foo
De la documentation:
Take<TSource>
énumèresource
et renvoie des éléments jusqu'à ce que descount
éléments aient été générés ousource
ne contiennent plus d'éléments. Sicount
dépasse le nombre d'éléments danssource
, tous les éléments desource
sont retournés.
@Janei: mon premier commentaire ici concerne votre échantillon;)
Je pense que si vous aimez ça, vous voulez prendre 4, puis appliquer le tri sur ces 4.
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
};
Différent du tri de tbl_News entières par idNews descendant puis prenant 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);
non ? les résultats peuvent être différents.
J'aime ça:
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
};
Que la prise ait lieu sur le client ou dans la base de données dépend de l'endroit où vous appliquez l'opérateur de prise. Si vous l'appliquez avant d'énumérer la requête (c'est-à-dire avant de l'utiliser dans un foreach ou de le convertir en une collection), la prise entraînera l'envoi de l'opérateur SQL "top n" à la base de données. Vous pouvez le voir si vous exécutez le profileur SQL. Si vous appliquez la prise après avoir énuméré la requête, cela se produira sur le client, car LINQ aura dû récupérer les données de la base de données pour que vous puissiez les énumérer à travers celle-ci.
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();
J'ai dû utiliser la méthode Take (n), puis transformer en liste, fonctionnait comme un charme:
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();
De cette façon, cela a fonctionné pour moi:
var noticias = from n in db.Noticias.Take(6)
where n.Atv == 1
orderby n.DatHorLan descending
select n;
Pour limit 1
les méthodes d'utilisation FirstOrDefault()
ou First()
.
Exemple
var y = (from x in q select x).FirstOrDefault();