【发布时间】:2010-10-30 07:47:40
【问题描述】:
我有一个查询,我需要为两个不同表中的两个不同列执行“Where”子句,但 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
请注意,在最后两行中,它对 Table1 和 Table3 都使用了 @Sid。我该怎么做才能使用@Sid0 和@Sid1?
任何帮助将不胜感激。谢谢
感谢您的回复,我真的很感激。我正在使用 2.1 我已经在使用 TableColumn。下面是c#亚音速代码...
.Where(Table1.SidColumn).IsEqualTo(2)
.And(Table3.SidColumn).IsEqualTo(1)
在 sql profiler 中查看时创建以下 sql
WHERE [dbo].[Table1].[Sid] = @Sid
AND [dbo].[Table3].[Sid] = @Sid
您能否告诉我如何用您建议的方式替换这些行?我真的宁愿不使用文字“Table2.Sid = 2”
ranmore,问题与变量或常量相同。
我也试过了
.Where("Table1.Sid").IsEqualTo(2)
.And("Table3.Sid").IsEqualTo(1)
这会将查询创建为
WHERE Table1.Sid = @Table1.Sid0
AND Table3.Sid = @Table3.Sid1
在这种情况下,我终于得到了不同的参数化变量,但现在 SQL Server 抱怨,因为它不喜欢 .在参数化的 var 名称中。
我不知道如何使用 2 个 where 子句为 2 个不同的表执行连接!
【问题讨论】:
标签: subsonic