2010-09-14 2 views
2

Cette question (LINQ and a natural sort order…) explique comment implémenter le tri naturel dans Linq à l'aide d'un IComparer. J'ai utilisé ceci avec succès dans le passé avec IEnumerables, mais je suis incapable de le faire fonctionner dans les expressions Linq-to-SQL. Est-ce parce que la surcharge spécifique de .OrderBy() qui prend un IComparer n'est pas supportée par Linq-to-SQL?Puis-je utiliser un IComparer dans .OrderBy() dans Linq-to-SQL?

Si c'est le cas, y a-t-il des solutions pratiques?

Répondre

1

Ce n'est pas que IComparer n'est pas supporté, c'est que dans Linq-to-Sql, un OrderBy() doit être traduit en une opération T-Sql. Si cela vous permet de spécifier des critères pour les comparaisons, le code C# derrière celui-ci devra être exécuté par le serveur SQL pour l'utiliser.

Si vous avez besoin de faire quelque chose dans Linq-To-Sql qui n'est pas supporté mais qui peut être fait dans T-SQL, vous pouvez toujours le contourner en utilisant une procédure stockée, qui fonctionne magnifiquement avec Linq-to- Sql. Si cela vous dérange, vous pouvez appeler la méthode ToList() pour appeler l'exécution et la trier en mémoire. L'aspect pratique dépend de la taille des données et de la quantité de données que vous souhaitez récupérer (comme lors de la mise en œuvre de la pagination).

1

Oui. Linq-to-SQL traduit vos expressions lambda directement en sql, donc il ne peut évidemment pas gérer du code arbitraire. Vous pouvez utiliser ToList() pour forcer l'exécution de la requête, puis exécuter votre OrderBy dans cette liste.

+0

Merci, c'était la réponse que j'étais assez confiant. Un gars peut toujours espérer, cependant. –

Questions connexes