インナーは、Expressionトラブルに参加します
-
20-09-2019 - |
質問
私は亜音速2.1を使用していますが、私はinnerjoinを行い、使用する必要がどこ表現し、私はエラーを取得しておいてください。
Must declare the scalar variable "@Partner"
ここに私のコードは次のとおりです。
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()
私はこの事を再配置し、約10種類の方法を試してみましたし、ちょうどそれを得るように見えることはできません。
解決
あなたは、where句ではなく、自分自身に参加する?
で結合基準を指定する理由があります あなたの代わりに、実行時のコンパイル時に問題をキャッチすることができますので、私はあなたが可能な限り行う必要があり、厳密に型指定された列名、を活用するクエリを再書きました。また、代わりに、読みやすくするためにその連結gobblydegookの.ContainsString()を使用します。
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()
それとも、内部結合の4つの文字列のオーバーロードを使用し、そこに列を指定し、元のコードを使用します。私はあなたが本当にする必要がない場合、where句に参加やろうとすることによって、最大トリップなっていると思います。
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()
他のヒント
.InnerJoin( "パートナーP")...どこ( "p.PartnerID")?
私は前にこれを見たことがないので、私は実際には単なる推測しています。私は愚かなことだのであれば私を無視:P
インナーは亜音速での参加行うには2通りの方法があります。最初の方法は、上のリンクする列を指定することで、といったます:
.InnerJoin(Partner.PartnerIDColumn, Customer.PartnerIDColumn)
関係があなたの亜音速のモデルにすでにセットアップされている場合は、、あなただけの列を指定しなくても、テーブルを指定することができます。これはあなたがやろうとしていたものですが、構文は非常に適切ではありませんでしたように見えます。あなたはこのように、ジェネリックを使用する必要があります:
.InnerJoin<Partner>()
それは、より読みやすいので、第二の方法は、preferrableです。あなたは()関数で指定したテーブルに参加しようとするときしかし、それだけで動作します。これは、このような状況では、あなたのために働く必要があります。