2009-06-30 7 views
1

il y a d'autres questions (au moins 2 je les ai vues) similaires à ceci mais je ne suis pas capable de résoudre ceci en les utilisant.Colonne avec le même nom dans plusieurs tables causant problème dans SubSonic Select

Maintenant le problème: J'ai 3 table à partir de laquelle je dois sélectionner 4 colonnes seulement. J'utilise InnerJoin et ça fonctionne parfaitement. Le problème commence quand j'ajoute un Où sélectionner ceci. J'ai une colonne nommée "Name" dans deux tables. Si j'ajoute simplement le

.Where("Name").Like("A%") 

Il dit: « ... nom de colonne ambigu .. »

Si j'utilise le nom de colonne complet (avec table préfixé pour nom de colonne) il est dit doit déclarer le paramètre @TABLE_NAME J'ai essayé de passer aussi la chaîne codée en dur mais rien ne fonctionne!

Répondre

4

Si vous passez dans l'objet de la colonne à l'instruction où SubSonic utilisera son nom complet au lieu de construire une chaîne. Vous pouvez trouver la colonne sur l'objet comme une propriété statique, dans ce cas, si vous avez un objet appelé « TableOne », vous pouvez utiliser « TableOne.NameColumn » et passer que dans le cas():

... 
sq.Where(TableTwo.NameColumn).Like("A%"); 
+0

merci pour la réponse Rob. Premièrement, ce n'est pas TableTwo.NameColumn mais TableTwo.Columns.NameColumn. Deuxièmement, quand je passe sq.Where (TableTwo.NameColumn), il utilise TableFour.Name dans le script SQL généré. Cela fonctionne mais à tort :([Je suis passé à SubSonic 2.2] – TheVillageIdiot

0

Je ne l'ai pas utilisé jamais,

mais vous avez votre essayé de changer votre dernière ligne:

sq.WhereExpression(Tables.TableTwo + "." + TableTwo.Columns.Name + " LIKE 'A%'); 
+0

WhereExpression est pour combiner plusieurs conditions, il n'aura aucun effet dans ce cas. –

1

Est-ce que le travail de requête suivante, je suppose que vous utilisez 2.2:

SqlQuery sq = new Select(TableOne.Columns.MemberId + " AS MemberId", 
    TableTwo.Columns.Name + " AS MemberName", 
    TableOne.Columns.ExpiryOn + " AS MembershipExpiresOn", 
    TableFour.Columns.Name + " AS Country") 
    .From(TableOne.Schema) 
    .InnerJoin(TableTwo.Schema) 
    .InnerJoin(TableThree.Schema) 
    .InnerJoin(TableFour.Schema) 
    .Where(TableTwo.Columns.Name).Like("A%"); 
+0

Oui comme posté quelque part sur ce site - lui-même par Rob Conery la deuxième chose pourrait fonctionner avec SubSonic 2.2, mais cela ne fonctionne pas. L'utilisation de la colonne Alias ​​ne fonctionne pas non plus, ce qui est étrange. – TheVillageIdiot

+0

Comment ça marche? –

+0

@Adam: .Where ("MemberName"). Like ("A%") ne fonctionnera probablement pas, car SQL Selects ne peut pas utiliser les alias dans une clause where. Cela ne fonctionne pas dans sql: "SELECT somme * quantité comme résultat résultat WHERE> 5". Vous devez écrire "SELECT somme * quantité comme résultat ayant un résultat> 5" ou "SELECT somme * quantité comme résultat WHERE somme * quantité> 5" à la place. –

Questions connexes