표현이 문제가있는 곳과 내부 합류
-
20-09-2019 - |
문제
나는 subsonic 2.1을 사용하고 있으며 내부 결합을하고 Where Expression을 사용해야하며 오류가 계속됩니다.
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
Subsonic과의 내부 결합을 수행하는 두 가지 방법이 있습니다. 첫 번째 방법은 다음과 같은 링크 할 열을 지정하는 것입니다.
.InnerJoin(Partner.PartnerIDColumn, Customer.PartnerIDColumn)
하위 소닉 모델에서 관계가 이미 설정된 경우 열을 지정하지 않고도 테이블을 지정할 수 있습니다. 이것이 당신이하려고했던 것 같지만 구문이 옳지 않았습니다. 다음과 같이 제네릭을 사용해야합니다.
.InnerJoin<Partner>()
두 번째 방법은 더 읽기 쉽기 때문에 선호됩니다. 그러나 From () 함수에서 지정하는 테이블과 결합하려고 할 때만 작동합니다. 이 상황에서 당신을 위해 효과가 있어야합니다.