문제

나는 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 () 함수에서 지정하는 테이블과 결합하려고 할 때만 작동합니다. 이 상황에서 당신을 위해 효과가 있어야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top