Est-ce que cela prend le nombre spécifié et s'arrête pendant l'interrogation ou après que toute la liste est déjà dans la collection? Quel est l'avantage de la performance, s'il y en a, lorsque vous «prenez»?Quand Linq's Take prend-il les résultats?
Répondre
Toutes les requêtes se produisent lors de l'énumération. Du point de vue de la performance, Take devrait être en mesure de déterminer le moyen le plus efficace de saisir un certain nombre d'éléments.
Cela signifie transférer dans une instruction "TOP n" dans Linq to SQL.
.
Mon Résultat (q.Take(10)).ToString()
:
SELECT TOP (10) [t0].[UserID], [t0].[RoleID]
FROM [dbo].[UsersRoles] AS [t0]
.
Et, le résultat de (q.Skip(10).Take(10)).ToString()
:
SELECT [t1].[UserID], [t1].[RoleID]
FROM (
SELECT ROW_NUMBER() OVER (ORDER BY [t0].[UserID], [t0].[RoleID]) AS [ROW_NUMBER], [t0].[UserID], [t0].[RoleID]
FROM [dbo].[UsersRoles] AS [t0]
) AS [t1]
WHERE [t1].[ROW_NUMBER] BETWEEN @p0 + 1 AND @p0 + @p1
ORDER BY [t1].[ROW_NUMBER]
Vous n'obtiendrez le nombre d'enregistrements spécifiés retour de la base de données, le filtrage se fait dans le SQL.
et si je fais 'Orderby' d'abord? – zsharp
aucune différence. L'arbre d'expression se traduira par le même sql –
Les autres réponses étaient en rapport avec LINQ to SQL qui est aussi dans les balises mais il vaut la peine de mentionner que LINQ to Objects fera ce que vous avez suggéré. Effectivement faire quelque chose comme ceci:
int i = 0;
foreach (var item in items) {
if (i++ < count) {
yield return item;
}
}
Donc en d'autres termes il prend seulement autant qu'il a besoin et s'arrête dès qu'il le peut.
Et évidemment une conséquence de cela signifie que:
var c = items.Take(10); // not yet enumerated
c.Count(); // enumerated the first 10
c.Count(); // enumerated the first 10 again
- 1. Linq Take() question
- 2. Existe-t-il un mécanisme de notification pour savoir quand les résultats de getifaddrs() changent?
- 3. Problèmes de commande les résultats d'une requête SQL quand j'ai des liens
- 4. Agréger les résultats LINQ
- 5. Zend_Db: Filtrer les résultats
- 6. Linq sur DataTable avec .Skip() et la méthode .Take()
- 7. WPG DataGrid Take() ne fonctionne pas pour ItemsSource
- 8. Quand ramasser les ordures
- 9. SQL, comment concaténer les résultats?
- 10. LINQ IMultipleResults - itérer sur les résultats
- 11. Supprimer les résultats du code généré
- 12. lignes en double lors de l'utilisation orderby, Skip() et Take() avec LINQ
- 13. Sql Agréger les résultats d'une procédure stockée
- 14. Ajouter les résultats de plusieurs requêtes COUNT
- 15. Comment chercher tous les résultats dans lucene.net
- 16. Centrer automatiquement les résultats de recherche vim
- 17. Comment obtenir tous les résultats de regex?
- 18. Java: Cache les résultats du calcul?
- 19. Le processus stocké n'affiche pas les résultats
- 20. Récupérer les résultats d'Oracle SP [curseur]
- 21. vb.net parcourir les résultats de la requête
- 22. Limiter les résultats d'un enregistrement actif find
- 23. Insert Python n'obtenant pas les résultats souhaités?
- 24. Appellation de l'API pour limiter les résultats?
- 25. Quand utiliser WCF et quand utiliser les services de données ADO dans les sites Web ajax?
- 26. NHibernate API Critères, les projections et les résultats
- 27. Les colonnes GridView sont créées -générées- quand?
- 28. Quand utiliser les événements C# personnalisés
- 29. Transactions, quand il faut les supprimer
- 30. Quand conserver les données dans l'application iPhone?
si je fais 'Orderby' FIrst? – zsharp
Toutes ces opérations sont différées vers SQL Server, ce qui permet d'utiliser des index, etc. pour obtenir les meilleures performances possibles. –