Je veux transférer la déclaration suivante à SubSonic 2,2subsonique 2 rejoindre sur plusieurs colonnes
SELECT b.*
FROM tableA a
INNER JOIN tableB b
ON (a.year = b.year AND a.month = b.monath AND a.userid = b.userid);
Mon problème est que la commande de SqlQuery.LeftInnerJoin subsonique() n'a pas de surcharge qui prend plus d'une colonne.
Depuis une jointure peut être réécrite en utilisant uniquement les clauses where, je ne le suit dans mon sql:
SELECT b.*
FROM tableA a, tableB b
WHERE a.year = b.year
AND a.month = b.month
AND a.userid = b.userid
qui devrait fournir le même résultat (en fait, au moins pour MySQL, il est logique absolument pas différence entre ces déclarations).
Mais je me suis également retrouvé bloqué en le transférant à subsonic parce que le membre "IsEqualTo (...)" est assez intelligent pour comprendre que mon paramètre est une chaîne et le met entre guillemets.
DB.Select("TableB.*")
.From<TableA>()
.From<TableB>()
.Where(TableA.YearColumn).IsEqualTo("TableB.Year")
.And(TableA.MonthColumn).IsEqualTo("TableB.Month")
.And(TableA.UseridColumn).IsEqualTo("TableB.UserId")
(j'ai essayé différentes façons de régler le paramètre IsEqualTo)
IsEqualTo(TableB.YearColumn)
IsEqualTo(TableB.YearColumn.QualifiedName)
Soit le paramètre est interprété comme
TableA.Year = 'TableB.Year'
ou je reçois un SqlQueryException. Est-ce que quelqu'un peut me dire comment faire cette requête avec subsonic (Soit le premier - avec JOIN ou le second)? Merci
Avez-vous essayé de vérifier l'instruction SQL générée? à-dire SubSonic.SqlQuery = new SubSonic.Select() A partir de (...;. Console.WriteLine (s.ToString()); – sparks
Oui, comme je l'ai mentionné les bandes de roulement SubSonic mon paramètre comme une chaîne (qui n'entrainera pas un échec mais est faux dans ce cas (SELECT * FROM tableA, tableB WHERE tableA.Year = 'TableB.Year' ne retournera jamais une ligne) –