Subsonic InnerJoin与Where表达式

Subsonic InnerJoin与Where表达式,subsonic,subsonic2.2,subsonic-active-record,subsonic-select,Subsonic,Subsonic2.2,Subsonic Active Record,Subsonic Select,我使用的是亚音速2.1,我需要进行一次innerjoin并使用where表达式,我不断得到错误: Must declare the scalar variable "@Partner" 这是我的密码: Dim ds As DataSet = UWP.Model.DB.Select("TOP 30 FirstName, LastName, EmailAddress, CustomerRowID, CompanyName") .From("Customer").InnerJoin("Partne

我使用的是亚音速2.1,我需要进行一次innerjoin并使用where表达式,我不断得到错误:

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种不同的方式重新安排这件事,但似乎都做不好。

.InnerJoin(“Partner p”)…Where(“p.PartnerID”)


我以前从未见过,所以我只是在猜测。因此,如果我只是愚蠢的话,请忽略我:p

是否有理由在where子句中而不是在联接本身中指定联接条件

我重新编写了查询以利用强类型列名,您应该尽可能做到这一点,因为您可以在编译时而不是运行时发现问题。另外,为了更好的可读性,请使用.containssString()代替连接的gobblydegook

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()
或者,要使用原始代码,只需使用InternalJoin的四个字符串重载并在其中指定列。我认为你在不需要的时候尝试在where子句中加入join,这会让你大吃一惊

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(Partner.PartnerIDColumn, Customer.PartnerIDColumn)
如果已在亚音速模型中设置了关系,则只需指定表格,而无需指定列。看起来这就是你要做的,但是你没有完全正确的语法。必须使用泛型,如下所示:

.InnerJoin<Partner>()
.InnerJoin()
第二种方式更可取,因为它更具可读性。但是,它仅在尝试与在From()函数中指定的表联接时起作用。在这种情况下,它应该对你有用