47 votes

Linq int vers string

Comment convertir un int en une chaîne de caractères ? Aucune des méthodes suivantes ne fonctionne :

from s in ctx.Services
    where s.Code.ToString().StartsWith("1")
    select s

from s in ctx.Services
    where Convert.ToString(s.Code).StartsWith("1")
    select s

from s in ctx.Services
    where ((string)s.Code).ToString().StartsWith("1")
    select s

EDIT

L'erreur que je reçois est la suivante :

LINQ to Entities does not recognize the method 'System.String ToString()' method, and this method cannot be translated into a store expression

54voto

Brian Cauthon Points 4031

Avec EF v4, vous pouvez utiliser SqlFunctions.StringConvert . Votre code ressemblerait donc à ceci :

from s in ctx.Services
where SqlFunctions.StringConvert((double)s.Code).StartsWith("1")
select s

EDIT

Comme Rick le mentionne dans son commentaire, la raison pour laquelle il faut convertir le int en double (le décimal fonctionne probablement aussi) est que la fonction n'a pas de surcharge pour int.

32voto

ShuggyCoUk Points 24204

Linq to Entities ne prend pas en charge autant de conversions de fonctions en sql hébergé par le serveur.

ToString (sur n'importe quoi) est l'un d'eux

Voici la liste des fonctions supportées

Cette question a déjà été posée sur Stack overflow, en particulier demander comment convertir un int en une chaîne de caractères

2voto

jboy Points 21

J'ai eu un problème similaire

        IQueryable<Street> query = db.Streets.AsQueryable();
        query = query.Where(street => street.Name.ToLower().StartsWith(keyword))
                        .Take(10)
                        .OrderBy(street => street.Name);

        var list = query.Select(street => new
        {
            street.StreetId,
            Name = street.Name + " " + street.Suburb.Name + " " + street.Suburb.State.Name + " " + street.Suburb.Postcode

        });

street.Suburb.Postcode génère le message "cannot convert non primative type error" car il s'agit d'un int. Après avoir suivi le lien de Shuggy, j'ai corrigé le problème en ajoutant .AsEnumerable pour forcer la conversion int ? -> string "côté client", c'est-à-dire LINQ to Objects.

var list = query.AsEnumerable().Select(street => new
        {
            street.StreetId,
            Name = street.Name + " " + street.Suburb.Name + " " + street.Suburb.State.Name + " " + street.Suburb.Postcode

        });

2voto

Mike Points 36

Lorsque vous utilisez LINQ to Objects, vous pouvez utiliser l'aide ToString().

1voto

neuralsea Points 11

Transformer IQueryable en IEnumerable puisque IQueryable hérite de IEnumerable. voir http://msdn.microsoft.com/en-us/library/system.linq.iqueryable.aspx - plus précisément : "L'énumération provoque l'exécution de l'arbre d'expression associé à un objet IQueryable. Je pense que la chose importante est 'La définition de "l'exécution d'un arbre d'expression" est spécifique à un fournisseur de requêtes'.

IQueryable est très puissant mais mal utilisé dans ce contexte.

Prograide.com

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.

Powered by:

X