Comment puis-je faire cela
Sélectionnez les 10 premiers Foo de MaTable
en Linq to SQL?
Comment puis-je faire cela
Sélectionnez les 10 premiers Foo de MaTable
en Linq to SQL?
Utilisez la méthode Take:
var foo = (from t in MyTable
select t.Foo).Take(10);
En VB LINQ, il existe une expression take:
Dim foo = From t in MyTable _
Take 10 _
Select t.Foo
À partir de la documentation:
Take
énumèresource
et retourne des éléments jusqu'à ce quecount
éléments aient été retournés ou quesource
ne contienne plus d'éléments. Sicount
dépasse le nombre d'éléments danssource
, tous les éléments desource
sont retournés.
Les petites différences en LINQ entre C# et VB sont agaçantes. Pourquoi C# n'a-t-il pas une expression take comme VB? Cela semble être un oubli. Et le manque de Subs anonymes en VB rend les lambdas beaucoup moins utiles.
+1 Juste ce dont j'avais besoin, aussi. Et pour ce que ça vaut, il semble que seules les dix premières données soient réellement téléchargées. Sinon, ma requête SELECT retournerait une énorme quantité de données, suffisamment pour provoquer une OutOfMemoryException après un délai douloureux. Avec Take( quantité-gérable ), pas de délai, pas d'exception.
En VB:
from m in MyTable
take 10
select m.Foo
Ceci suppose que MyTable implémente IQueryable. Vous devrez peut-être y accéder via un DataContext ou un autre fournisseur.
Cela suppose également que Foo est une colonne dans MyTable qui est mappée à un nom de propriété.
Consultez 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.
Cela ne fonctionne pas en C#, il n'y a pas d'expression take. Vous devez utiliser la méthode Take().
Techniquement, le questionneur a demandé Linq to SQL, donc VB est une hypothèse viable. Cela dit, ALassek, je suis moi-même un gars en c# et je préfère votre réponse. :-)
@Janei: mon premier commentaire ici concerne votre exemple ;)
Je pense que si vous faites comme ça, vous voulez en 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 toute la tbl_News par idNews décroissant puis en 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);
n'est-ce pas ? Les résultats peuvent être différents.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.