0

我使用亞音速2.1和我需要做的innerjoin並使用其中的表達,我不斷收到錯誤: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種不同的方式,只是似乎無法得到它的權利。

回答

2

是否有你在where子句中指定連接標準而不是在連接本身中的原因?

我重新編寫了您的查詢以利用強類型列名,您應該儘可能地執行這些操作,因爲您可以在編譯時而不是運行時捕獲問題。此外,使用.ContainsString()而不是該連接的gobblydegook以獲得更好的可讀性。或者要使用您的原始代碼,只需使用內部連接的四個字符串重載並在其中指定列即可。我認爲當你不需要的時候,試圖在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() 
0

.InnerJoin(「Partner p」).. Where(「p.PartnerID」)?

我從來沒有見過這個,所以我真的只是猜測。所以不理我,如果我只是很愚蠢:p

0

有兩種方法可以用亞音速進行內連接。第一種方式是指定列鏈接,如:

.InnerJoin(Partner.PartnerIDColumn, Customer.PartnerIDColumn) 

如果關係已經安裝在你的亞音速模型,你可以指定表,而不必指定列。看起來這是你想要做的,但是你沒有正確的語法。您必須使用仿製藥,如下所示:

.InnerJoin<Partner>() 

第二種方法是可取的,因爲它更具可讀性。但是,只有在試圖連接您在From()函數中指定的表時才起作用。在這種情況下它應該適合你。