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()函数中指定的表时才起作用。在这种情况下它应该适合你。