Comment OrderBy un entier en une chaîne de caractères dans une requête Linq
J'ai des données provenant d'une DB que je ne peux pas facilement modifier le schéma d'. Je veux les trier et de les lier à un contrôle basé sur un IDENTIFIANT numérique. Le problème c'est que l'API stocke le nombre en une chaîne de caractères au lieu d'une int
et Linq barfs sur la tentative de conversion.
myControl.DataSource = dataFromDB.OrderBy(o => int.Parse(o.StringHoldingAnInt));
LINQ to entities ne reconnaît pas la méthode 'Int32 Parse(System.String)', et cette méthode ne peut pas être traduit dans un magasin d'expression.
Convert.ToInt32
ne fonctionne pas non plus.
LINQ to entities ne reconnaît pas la méthode 'Int32 ToInt32(Système d'.String)', et cette méthode ne peut pas être traduit dans un magasin d'expression.
Tri comme une chaîne de caractères n'est pas approprié parce que les valeurs ne sont pas tous de la même longueur et qu'il serait de commande comme ceci: 1, 10, 11, 2, 3..
- Quelle quantité de données est-il? Serait-il possible d'effectuer un tri sur le côté client?
- Vous pouvez essayer de le tampon de la chaîne de caractères '0', de sorte qu'ils ont tous la même longueur... mais je ne suis pas sûr de Chaîne.PadLeft est pris en charge par Linq.
- plusieurs centaines de lignes dans la base de données, seulement quelques dizaines de lignes après le Where() requête j'ai omis de ma question.
- Linq-to-Entités n'aime pas la Chaîne.PadLeft soit.
Vous devez vous connecter pour publier un commentaire.
Ce ne sera pas presque aussi efficace parce que vous n'êtes pas exploiter la base de données de requête pour filtrer vos résultats, mais ce serait fondamentalement requête pour toutes les données, puis on le filtre sur le client.
Il est possible de le faire sur le DB côté. L'idée est de ici. Donc, il ne le tri correctement mis en forme de chaîne(zéro caractères sont ajoutés à gauche et ensuite la quantité nécessaire de caractères est prise à partir de la droite)
Vous pouvez convertir la requête à une liste:
Maintenant, vous pouvez commander par les valeurs en les convertissant:
Le problème avec ceci est que vous obtenez un nombre important de valeurs qu'ils viennent tous de la base de données et ensuite vous commandez en mémoire.
.OrderBy()
retourne unIEnumerable
. Lelist.OrderBy()
ligne ci-dessus va actuellement de ne rien faire, puisque vous n'êtes pas de l'affectation de la valeur de retour de.OrderBy()
à une variable.