0

Я использую Дозвуковой 2.1 и мне нужно сделать innerjoin и использовать где выражение и я получаю сообщение об ошибке:InnerJoin с Где Expression Проблема

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, а не в самом соединении?

Я переписал ваш запрос, чтобы использовать строго типизированные имена столбцов, которые вы должны делать, когда это возможно, потому что вы можете ловить проблемы во время компиляции вместо времени выполнения. Кроме того, используйте CorttainsString() вместо этого конкатенированного 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() 
0

. InnerJoin («Партнер p») .. Где («p.PartnerID»)?

Я никогда раньше этого не видел, так что я действительно догадываюсь. Поэтому игнорируйте меня, если я просто глуп: p

0

Существует 2 способа сделать внутреннее соединение с дозвуковым. Первый способ заключается в указании столбцов по ссылке, например:

.InnerJoin(Partner.PartnerIDColumn, Customer.PartnerIDColumn) 

Если отношения уже настроены в вашей дозвуковых модели, вы можете просто указать таблицу, без указания столбцов. Похоже, это то, что вы пытались сделать, но у вас не было синтаксиса совершенно правильно. Вы должны использовать дженерики, например:

.InnerJoin<Partner>() 

Второй способ предпочтительнее, потому что он более читабельен. Тем не менее, он работает только при попытке присоединиться к таблице, указанной в функции From(). Он должен работать для вас в этой ситуации.

Смежные вопросы