2012-03-23 5 views
0

Ich habe eine Abfrage, dieIst es möglich, eine linq-Abfrage mit String-Verkettung anstelle von Bezeichnern durchzuführen?

var queryItems = rawQuery.ObsDataResultList.AsQueryable().Where("Name = @0 AND AuthoredDate = @1" +, selectedItem, dateKey).ToList();

funktioniert gut ich die Abfrage

var queryItems = rawQuery.ObsDataResultList.AsQueryable().Where("Name = @0 AND AuthoredDate = " + dateKey.ToString(), selectedItem).ToList();

Hinweis das einzige, was ich geändert wurde das Entfernen der Kennung aktualisiert werden soll. Jetzt erhalte ich Fehler

Operator '=' inkompatibel mit Operandentypen 'DateTime?' und 'Int32'

Wie kann ich den Fehler beheben, ohne auf die ursprüngliche Abfrage zurückzugehen?

+2

Warum willst du das machen ?! Warum möchten Sie eine sehr gute Frage absichtlich ruinieren? –

+0

@MarkByers - Ich plane, eine Liste solcher where-Anweisungen zu nehmen und sie als Konstanten in einer Struktur zu speichern. Die Struktur könnte ein einzelner Referenzpunkt für unterstützte Abfragen sein. Mit den Parametern in der Liste ist es schwierig, dies zu tun, da die Anzahl der Parameter stark variieren kann. Gibt es einen technischen Vorteil für die erste Form? Z.B. etwas wie die Parametrisierung von Parametern, um eine Injektion zu vermeiden? –

+0

@PBrianMackey: Ja, Sie könnten eine Injektion bekommen. Warum ist es schwierig, eine Liste von Parametern zu speichern? –

Antwort

3

Sie fehlen Zitate: obwohl

.Where("Name = @0 AND AuthoredDate = \"" + dateKey + "\"") 

Es scheint wie eine wirklich schlechte Idee, um Ihren Code wie folgt zu verderben. Ihre ursprüngliche Abfrage scheint viel besser zu sein.

+0

Danke - ich behalte das im Hinterkopf und versuche sicher eine Lösung zu finden, die auf der ursprünglichen Form basiert. –

+0

@ P.Brian.Mackey: Ich ursprünglich angenommen, dass einzelne Anführungszeichen erforderlich sein würde, aber nach dem Googeln fand ich [diese Antwort] (http://stackoverflow.com/a/2288328/61974) verwendet doppelte Anführungszeichen, so änderte ich meine Antwort . –

Verwandte Themen