-
20-09-2019 - |
题
我使用亚音速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,因为它是更具有可读性。然而,它只是试图与您在从()函数指定表时加入工作。它应该在这种情况下,为你工作。
不隶属于 StackOverflow