У меня есть запрос, в котором мне нужно выполнить предложение «Где» для двух разных столбцов в двух разных таблицах, но Subsonic создает одинаковое имя параметризованного параметра для обеих, что вызывает проблему. Как я могу это исправить?
string _RawSql = new Select()
.From(Tables.Table1)
.InnerJoin(Tables.Table2)
.InnerJoin(Table3.SidColumn, Table2.Table3SidColumn)
.Where(Table1.SidColumn).IsEqualTo(2)
.And(Table3.SidColumn).IsEqualTo(1)
.BuildSqlStatement();
Запрос, который он создает,
SELECT ....
FROM [dbo].[Table1]
INNER JOIN [dbo].[Table2] ON [dbo].[Table1].[Table2Sid] = [dbo].[Table2].[Sid]
INNER JOIN [dbo].[Table3] ON [dbo].[Table2].[Table3Sid] = [dbo].[Table3].[Sid]
WHERE [dbo].[Table1].[Sid] = @Sid
AND [dbo].[Table3].[Sid] = @Sid
Обратите внимание, что в последних двух строках используется @Sid как для Table1, так и для Table3. Как мне это сделать, чтобы он использовал @ Sid0 и @ Sid1?
Любая помощь будет оценена. Спасибо
Спасибо за ответ, я действительно ценю это. Я использую 2.1
Я уже использую TableColumn. Ниже приведен дозвуковой код c # ...
.Where(Table1.SidColumn).IsEqualTo(2)
.And(Table3.SidColumn).IsEqualTo(1)
, который создает следующий sql при просмотре в sql profiler
WHERE [dbo].[Table1].[Sid] = @Sid
AND [dbo].[Table3].[Sid] = @Sid
Не могли бы вы показать мне, как я могу заменить эти строки так, как вы предлагаете? Я действительно предпочел бы не использовать литерал "Table2.Sid = 2"
Ранмор, проблема та же с переменными или с константами.
Я даже пытался
.Where("Table1.Sid").IsEqualTo(2)
.And("Table3.Sid").IsEqualTo(1)
Это создает запрос как
WHERE Table1.Sid = @Table1.Sid0
AND Table3.Sid = @Table3.Sid1
Я, наконец, получаю разные параметризованные переменные в этом случае, но теперь SQL Server жалуется, потому что это не нравится. в параметризованных именах переменных.
Понятия не имею, как выполнить объединение с двумя предложениями where для 2 разных таблиц!