2009-05-20 8 views
0

Ich versuche, so etwas zu machen:Subsonic - Bitoperation in Where-Klausel

int count = new Select().From(tblSchema).Where("Type & 1").IsEqualTo("1").GetRecordCount(); 

Und die Fehlermeldung lautet:

falsche Syntax nahe '&'.

Muss die Skalarvariable "@Deleted" deklarieren.

Ist das mit SubSonic möglich?

+0

Es ist nicht ganz klar, was Sie versuchen, herauszufinden, zu erreichen könnte man hinzufügen, schreiben die SQL-Anweisung, die SubSonic generieren soll –

+0

ich rate rate Auswahl zählen (*) wo Typ & 1 – rball

Antwort

-1

Es ist ein wenig unklar, was Sie erreichen möchten, aber hier ist eine beste Schätzung.

int count = new Select().From(tbl.Schema).Where(tbl.TypeColumn).IsEqualTo(true).GetRecordCount(); 
0

Muss die Skalarvariable „@Deleted“ erklärt

Der zweite Fehler würde mit logischen Löschungen auf dem Tisch Sie abfragen verursacht werden (die Tabelle hat eine isDeleted oder gelöschte Spalte).

Aber ich schaue durch den Code, ich bin mir nicht sicher, wie dieser Parameter da reinkommt. Die SqlQuery.GetRecordCount Methode ruft CheckLogicalDelete() nicht auf, was ich sagen kann. Ist diese Fehlermeldung nicht relevant?

0

Dies scheint ein Fehler in der Art und Weise zu sein, wie SubSonic seine Parameter benennt, wenn es das auszuführende SQL generiert.

Was passiert ist, dass SubSonic "Typ & 1" betrachtet und dann einen Parameter zum Vergleich erstellt, der gegen @Type & 10 aufgerufen wird, was kein gültiger SQL-Parametername ist. Sie erhalten also die folgende SQL aus Ihrer ursprünglichen Abfrage. Sie sollten einen Fehler zu http://code.google.com/p/subsonicproject/

einreichen Zwischenzeit können Sie den Fehler jetzt umgehen, indem Sie eine Inline-Abfrage:

http://subsonicproject.com/docs/Inline_Query_Tool