Convertit une chaîne en un entier pour la commande à l'aide de LINQ
Je voudrais commander ma liste par une chaîne convertie en int:
var orderedListOfRfidTags = uow.RfidTags.OrderBy(t => Convert.ToInt32(t.Number)).ToList();
mais à obtenir: La méthode 'ToInt32" n'est pas pris en charge.
Voulez-vous dire LINQ to SQL ou EF?
Suis en utilisant Lightspeed que mon ORM.. mais je suis de deviner ce qui peut être agnostique à tous les fournisseurs linq?
non, c' t dépendent du fournisseur. Certains fournisseurs pourraient soutenir que la méthode.
Une option serait d'essayer en utilisant
Suis en utilisant Lightspeed que mon ORM.. mais je suis de deviner ce qui peut être agnostique à tous les fournisseurs linq?
non, c' t dépendent du fournisseur. Certains fournisseurs pourraient soutenir que la méthode.
Une option serait d'essayer en utilisant
int.Parse()
au lieu de cela, mais il est probable que ne fonctionne pas, soit.OriginalL'auteur Dave Mateer | 2011-05-12
Vous devez vous connecter pour publier un commentaire.
Je suis l'un des développeurs de LightSpeed.
Le fournisseur LINQ dans LightSpeed 3.11 RTM ne supporte pas les Convertir.ToInt32. Cependant, nous avons maintenant ajouté la prise en charge par un tous les soirs de la libération, qui est maintenant disponible pour téléchargement.
Si vous ne souhaitez pas l'utiliser tous les soirs de presse, vous pouvez obtenir le résultat que vous voulez par de descendre à la Requête des Objets de l'API et de l'invocation de la SQL fonction de distribution directement. Cela va ressembler à quelque chose comme:
La raison de l'assez bavard LiteralExpression pour le type moulé est que par défaut LightSpeed envoie les valeurs à la base de données par l'intermédiaire des paramètres (pour éviter les attaques par injection SQL). Mais pour la fonction de distribution du moteur SQL doit voir
CAST(Number, INTEGER)
plutôt queCAST(Number, @p0)
où p0 est la valeur "INTEGER". Donc, vous devez utiliser un EmitInline expression, qui contourne le paramétrage, plutôt que le plus naturel littéral de chaîne.Une fois encore, tous les soirs de presse ne supporte de Convertir.ToInt32 dans LINQ, donc vous avez seulement besoin de descendre à ce niveau, si vous voulez éviter de prendre une nightly build.
OriginalL'auteur itowlson
Ce sujet:
supprimer toute méthode CLR donc ORM pouvez le transformer en connu de requête SQL
EDIT:
Je viens de lire voulez convertir au préalable afin d':
soit pour tous à partir de DB puis de le commander sur le client (linq to object) comme je l'ai mentionné avant, ou trouver une méthode de l'ORM de cast en int la commande. Avant de vous afin de Sélectionner une nouvelle liste avec un Nombre converti ensuite, afin que par elle.
Edit2:
Ce sujet de la directe de la fonte est de travailler avec cette ORM?
juste mis à jour la réponse
Ce sujet de la directe casting? consultez la dernière mise à jour #2
OriginalL'auteur Ahmed Magdy
OriginalL'auteur Thulasiram
Je ne suis pas sûr de ce genre de type "RfidTags" est, je ne suis pas familier avec la Lightspeed ORM, mais je sais que lorsque j'ai eu des problèmes similaires avec Linq to Sql me disant qu'une méthode particulière que je suis en train d'invoquer dans un cas ou OrderBy clause n'est pas pris en charge, je viens de changer les choses autour de sorte que je fais face à un bon vieux Linq à la place.
Par exemple, pourriez-vous essayer?
(oui, il est possible de combiner en une seule ligne, mais ici sur deux lignes pour plus de clarté.)
Bonne chance!
OriginalL'auteur Funka
Essayez d'utiliser
int.Parse
au lieu de les Convertir. Il est probable que Lightspeed prend en charge un sans le soutien de l'autre.OriginalL'auteur StriplingWarrior
Donc, voici ma solution à ce problème:
J'ai d'abord joué le IQueryable à une liste, et ensuite converti la colonne de type de données chaîne de int32 pour une utilisation dans des opérations mathématiques.
J'espère que cette aide.
Si la colonne doit être converti en une chaîne de caractères afin d'être appliqué à un filtre sur un ensemble de résultats, c'est la seule façon que j'ai trouvée dans LINQ pour effectuer l'opération. On pourrait imaginer une situation où vous tirez vos résultats: var x = _db.Où(x => x.filt_col == somevalue).ToList (), mais avec des données qui doivent t être brisé et filtrés seulement après qu'il a été tiré à partir du back-end et de la conversion: var a = x.Où(x => Convertir.ToInt32(x.col_string) > 0 && Convertir.ToInt32(x.col_string) < 100)), var b = x.Où(x => Convertir.ToInt32(x.col_string) > 100 && Convertir.ToInt32(x.col_string) < 200))
OriginalL'auteur JRAnderson