2016-09-22 24 views
1

Ich versuche, die folgende Abfrage funktioniert:Kinder konnten nicht ausgewertet werden

var query = from c in context.ChargeMultipliers where c.Description.Replace(" ", string.Empty).ToUpper() == description.ToUpper().Replace(" ", string.Empty)select c; 

In der oben Ich versuche, die SQL-Feld „Beschreibung“ in einen String ohne Leerzeichen zu trimmen, alle Großbuchstaben und eine Vergleichsbeschreibungsstring auch getrimmt und nach oben konvertiert. Ich erhalte jedoch als Ergebnis der Abfrage "Kinder konnten nicht ausgewertet werden".

Irgendwelche Ideen, warum das passiert?

+0

Bitte senden Sie die Ausnahme Stack-Ablaufverfolgung. –

+0

Wahrscheinlich Linq zu Entities konnte nicht übersetzen c.Description.Replace ("", string.Empty). ToUpper() in gültigen SQL, versuchen Sie einfach, Linq zu Objekten auf Linq zu Entities zu verwenden. – Vladimir

Antwort

0

Wenn Ihre Abfrage debuggen, wird folgende SQL-Anweisung generiert:

SELECT 
    [Extent1].[ID] AS [ID], 
    [Extent1].[Description] AS [Description], 
    FROM [dbo].[ChargeMultipliers] AS [Extent1] 
    WHERE (UPPER(REPLACE([Extent1].[Description], N' ', @p__linq__0))) = (UPPER(REPLACE(@p__linq__1, N' ', @p__linq__2))) 

Wie Sie sehen können, ist der Vergleich auch in der SQL-Anweisung getrimmt und string.Empty woud als Parameter übergeben werden, die vielleicht nicht ist das leere Zeichen im Verständnis der Datenbank.

Ich würde es vorziehen, dies zu tun, bevor die Anfrage erstellt:

 string descriptionTrim = description.Replace(" ", string.Empty).ToUpper(); 

     var query = from c in context.ChargeMultipliers 
        where c.Description.Replace(" ", "").ToUpper() == descriptionTrim 
        select c; 

Die generierte SQL-Abfrage sieht ganz einfacher und Sie können ganz einfach, was wirklich in der WHERE-Klausel verglichen werden herausfinden:

SELECT 
    [Extent1].[ID] AS [ID], 
    [Extent1].[Description] AS [Description], 
    FROM [dbo].[ChargeMultipliers] AS [Extent1] 
    WHERE (UPPER(REPLACE([Extent1].[Description], N' ', N''))) = @p__linq__0 
+0

Das stimmt. Wenn Sie auch 'string.Empty' durch' '' 'ersetzen, wird einer der Parameter gelöscht. Aber all das beantwortet die OP-Frage nicht. –

+0

Ich habe gerade meine Antwort verbessert. Das Ersetzen von string.Empty durch "" könnte helfen, weil die C# string.Empty nicht unbedingt mit der 'leeren' der Datenbank übereinstimmen muss. – Patrick

+0

Der Punkt ist, dass verbessert oder nicht, Sie beantworten eine andere Frage, nicht die Frage von der OP, die verursacht wird * "Kinder konnten nicht bewertet werden" Ausnahme *. –

Verwandte Themen