我使用亚音速2.1和我需要做一个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种不同的方式,只是似乎无法得到它的权利。

有帮助吗?

解决方案

是否有您所指定的where子句中,而不是在加入本身?

连接标准的理由

我重新写你的查询,利用强类型的列名,你应该做的尽可能的,因为你可以赶上在编译的时候,而不是运行时间的问题。此外,使用.ContainsString()而不是级联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()

或者用你的原代码,只需使用四根弦超负荷的内部连接,有指定的列。我想你要试图做的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

有2种方式做亚音速内连接。第一种方式是指定列链路上,如:

.InnerJoin(Partner.PartnerIDColumn, Customer.PartnerIDColumn)

如果关系已经安装在你的亚音速模型,你可以指定表,而不必指定列。看起来这是你试图做的,但你没有语法完全正确。您必须使用泛型,像这样的:

.InnerJoin<Partner>()

的第二种方式是preferrable,因为它是更具有可读性。然而,它只是试图与您在从()函数指定表时加入工作。它应该在这种情况下,为你工作。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top