Frage

Ich bin mit Subsonic 2.1 und ich brauche eine innerjoin zu tun, und verwenden Sie einen Ausdruck, wo und ich erhalte die Fehlermeldung:

Must declare the scalar variable "@Partner"

Hier ist mein Code:

Dim ds As DataSet = UWP.Model.DB.Select("TOP 30 FirstName, LastName, EmailAddress, CustomerRowID, CompanyName")
 .From("Customer").InnerJoin("Partner")
     .Where("Partner.PartnerID").IsEqualTo("Customer.PartnerID")
 .WhereExpression("FirstName").Like("%" & SearchTerm & "%")
     .Or("LastName").Like("%" & SearchTerm & "%")
     .Or("EmailAddress").Like("%" & SearchTerm & "%")
 .CloseExpression()
 .ExecuteDataSet()

Ich habe versucht, neu zu ordnen diese Sache über 10 verschiedene Arten und kann einfach nicht scheinen es richtig zu machen.

War es hilfreich?

Lösung

Gibt es einen Grund, warum Sie die Kriterien Join festlegen, in der where-Klausel statt in der Verknüpfung selbst?

ich wieder schrieb Abfrage Vorteil stark typisierte Spaltennamen zu nehmen, die Sie tun sollten, wann immer möglich, weil Sie Probleme bei der Kompilierung statt Laufzeit zu fangen. Verwenden Sie auch .ContainsString () anstelle des verketteten gobblydegook für bessere Lesbarkeit.

Dim ds As DataSet = UWP.Model.DB.Select("TOP 30 FirstName, LastName, EmailAddress, CustomerRowID, CompanyName")
 .From(Customer.Schema)
  .InnerJoin(Partner.PartnerIDColumn, Customer.PartnerIDColumn)
  .Where(Customer.FirstNameColumn).ContainsString(SearchTerm)
  .Or(Customer.LastNameColumn).ContainsString(SearchTerm)
  .Or(Customer.EmailAddressColumn).ContainsString(SearchTerm)
 .ExecuteDataSet()

oder Ihre Original-Code zu verwenden, benutzen Sie einfach die Schnur vier Überlastung der inneren Verknüpfung und die Spalten angeben dort. Ich glaube, Sie stolpern immer, indem Sie versuchen die Verbindung in die where-Klausel zu tun, wenn Sie nicht wirklich benötigen.

Dim ds As DataSet = UWP.Model.DB.Select("TOP 30 FirstName, LastName, EmailAddress, CustomerRowID, CompanyName")
 .From("Customer")
 .InnerJoin("Partner","PartnerID","Customer","PartnerID")
 .Where("FirstName").Like("%" & SearchTerm & "%")
     .Or("LastName").Like("%" & SearchTerm & "%")
     .Or("EmailAddress").Like("%" & SearchTerm & "%")
 .ExecuteDataSet()

Andere Tipps

.InnerJoin ( "Partner p") .. Wo ( "p.PartnerID")?

Ich habe das noch nie gesehen, so bin ich wirklich nur raten. So ignorieren Sie mich, wenn ich gerade bin dumm: p

Es gibt zwei Möglichkeiten, eine innere Verknüpfung mit Subsonic zu tun. Der erste Weg ist die Spalt Link auf, wie zum Beispiel angeben:

.InnerJoin(Partner.PartnerIDColumn, Customer.PartnerIDColumn)

Wenn die Beziehungen bereits Setup in Ihrem SubSonic Modell, können Sie einfach die Tabelle angeben, ohne die Spalten angeben zu müssen. Es sieht aus wie das ist, was Sie zu tun haben versucht, aber du hast nicht die Syntax hat ganz recht. Sie müssen Generika verwenden, wie folgt aus:

.InnerJoin<Partner>()

Der zweite Weg ist preferrable weil es besser lesbar ist. Aber es funktioniert nur, wenn sie mit dem Tisch zu verbinden versuchen, dass Sie in der Aus () Funktion angeben. Es sollte in dieser Situation für Sie arbeiten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top