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
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
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.
Wenn Sie LINQ to Objects verwenden, können Sie den ToString () - Helfer verwenden.
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
});
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.
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