wake-up-neo.com

Linq int zu string

wie wirke ich und int in eine Zeichenfolge? Keine der folgenden Möglichkeiten funktioniert:

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

Der Fehler, den ich erhalte, ist:

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

48
pistacchio

Linq to Entities unterstützt nicht so viele Konvertierungen von Funktionen in servergesteuertes SQL.

ToString (auf irgendetwas) ist einer von ihnen

Hier ist die Liste von nterstützte Funktionen

Dies wurde zuvor speziell beim Stack-Überlauf abgefragt Fragen, wie ein Int in einen String konvertiert wird

33
ShuggyCoUk

Mit EF v4 können Sie SqlFunctions.StringConvert verwenden. Ihr Code würde also am Ende so aussehen:

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

[~ # ~] edit [~ # ~]

Wie Rick in seinem Kommentar erwähnt, ist der Grund für das Umwandeln des Int in ein Double (Dezimalzahl funktioniert wahrscheinlich auch), dass die Funktion keine Überladung für Int enthält.

55
Brian Cauthon

Wenn Sie LINQ to Objects verwenden, können Sie den ToString () - Helfer verwenden.

2
Mike

Ich hatte ein ähnliches Problem

        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 hat den Fehler "Nicht-Primativ-Typ-Fehler kann nicht konvertiert werden" als Ganzzahl ausgegeben. Nachdem ich dem Link von Shuggy gefolgt war, habe ich das Problem durch Hinzufügen von .AsEnumerable behoben, um int zu erzwingen. -> String-Konvertierung "clientseitig", d. h. LINQ to Objects. d.h.

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

        });
2
jboy

iQueryable in IEnumerable umwandeln, da IQueryable IEnumerable erbt. Siehe http://msdn.Microsoft.com/en-us/library/system.linq.iqueryable.aspx - Insbesondere: 'Durch die Aufzählung wird der Ausdrucksbaum ausgeführt, der einem IQueryable-Objekt zugeordnet ist.' Ich denke, das Wichtigste ist, dass die Definition von "Ausführen eines Ausdrucksbaums" für einen Abfrageanbieter spezifisch ist.

IQueryable ist sehr mächtig, wird aber in diesem Zusammenhang missbraucht.

1
neuralsea

Ich habe diese Problemumgehung versucht und es hat bei mir funktioniert:

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

Hoffe das hilft

1
Everto