Я хочу перенести следующее утверждение в SubSonic 2.2
SELECT b.*
FROM tableA a
INNER JOIN tableB b
ON (a.year = b.year AND a.month = b.monath AND a.userid = b.userid);
Моя проблема в том, что команда SubSonic SqlQuery.LeftInnerJoin () не имеет перегрузки, которая занимает более одного столбца.
Поскольку любое объединение можно переписать только с помощью предложений where, я сделал следующее в своем sql:
SELECT b.*
FROM tableA a, tableB b
WHERE a.year = b.year
AND a.month = b.month
AND a.userid = b.userid
, который должен дать тот же результат (на самом деле, по крайней мере для mysql, логически нет абсолютно никакой разницы между этими утверждениями).
Но я также застрял, переводя это в subsonic, потому что член "IsEqualTo (...)" достаточно умен, чтобы выяснить, что мой параметр - строка, и помещает его в кавычки.
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")
(я пробовал разные способы установки параметра IsEqualTo)
IsEqualTo(TableB.YearColumn)
IsEqualTo(TableB.YearColumn.QualifiedName)
Либо параметр интерпретируется как
TableA.Year = 'TableB.Year'
или я получаю SqlQueryException.
Может кто-нибудь сказать мне, как сделать этот запрос с дозвуковой (либо первый - с JOIN или второй)? Спасибо