0

J'utilise Subsonic 2.1 et je dois faire une innerjoin et d'utiliser une où l'expression et je continue à obtenir l'erreur:InnerJoin avec Où des problèmes d'expression

Must declare the scalar variable "@Partner" 

Voici mon code:

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() 

J'ai essayé de réorganiser cette chose de 10 manières différentes et je n'arrive pas à la comprendre.

Répondre

2

Y a-t-il une raison pour laquelle vous spécifiez les critères de jointure dans la clause where au lieu de dans la jointure elle-même?

J'ai réécrit votre requête pour tirer parti des noms de colonnes fortement typés, ce que vous devriez faire lorsque cela est possible car vous pouvez intercepter les problèmes au moment de la compilation au lieu de l'exécuter. En outre, utilisez .ContainsString() à la place de gobblydegook concaténé pour une meilleure lisibilité. Ou pour utiliser votre code original, utilisez simplement la surcharge à quatre chaînes de jointure interne et indiquez les colonnes à cet endroit. Je pense que vous vous faites trébucher en essayant de joindre la clause Where lorsque vous n'en avez pas vraiment besoin.

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 ("Partenaire p") .. Où ("p.PartnerID")?

Je n'ai jamais vu ça auparavant, donc je ne fais que deviner. Donc, ignorez moi si je suis juste stupide: p

0

Il existe 2 façons de faire une jointure interne avec subsonic. La première est de spécifier les colonnes à lier sur, par exemple:

.InnerJoin(Partner.PartnerIDColumn, Customer.PartnerIDColumn) 

Si les relations est déjà configuré dans votre modèle subsonique, vous pouvez simplement spécifier la table, sans avoir à spécifier les colonnes. On dirait que c'est ce que vous essayiez de faire, mais vous n'aviez pas la syntaxe correcte. Vous devez utiliser des génériques, comme ceci:

.InnerJoin<Partner>() 

La deuxième méthode est préférable parce qu'elle est plus lisible. Cependant, cela ne fonctionne que lorsque vous essayez de joindre la table que vous spécifiez dans la fonction From(). Cela devrait fonctionner pour vous dans cette situation.