使用Where()时不正确生成SubSonic.SqlQuery

时间:2009-06-03 15:56:39

标签: subsonic

我使用的是SubSonic 2.1版。我正在尝试构建一个相对简单的查询,其中我使用UserId作为参数获取用户的角色列表。 (UserId是一个字符串......)

SubSonic.SqlQuery sel = new SubSonic.Select().From(Data.Tables.Role).InnerJoin(Data.Tables.UserRole, Data.UserRole.Columns.RoleId, Data.Tables.Role, Data.Role.Columns.Id).InnerJoin(Data.Tables.User, Data.User.Columns.Id, Data.Tables.UserRole, Data.UserRole.Columns.UserId).Where("[dbo].[User].[Id]").IsEqualTo(userId);

这会生成查询

SELECT [dbo]。[Role]。[Id],[dbo]。[Role]。[PID],[dbo]。[Role]。[Name] 来自[dbo]。[角色] INNER JOIN [dbo]。[UserRole] ON [dbo]。[Role]。[Id] = [dbo]。[UserRole]。[RoleId] INNER JOIN [dbo]。[User] ON [dbo]。[UserRole]。[UserId] = [dbo]。[User]。[Id] WHERE [dbo]。[用户]。[Id] = @ [dbo]。[用户]。[Id] 0

失败了。如果我将Where替换为.Where(Data.User.Columns.Id),则生成查询

SELECT [dbo]。[Role]。[Id],[dbo]。[Role]。[PID],[dbo]。[Role]。[Name] 来自[dbo]。[角色] INNER JOIN [dbo]。[UserRole] ON [dbo]。[Role]。[Id] = [dbo]。[UserRole]。[RoleId] INNER JOIN [dbo]。[User] ON [dbo]。[UserRole]。[UserId] = [dbo]。[User]。[Id] WHERE [dbo]。[角色]。[Id] = @ Id0

使用Where子句中的Role表而不是User表。

这是一个错误,还是我做错了什么?这样做的正确方法是什么?感谢。

1 个答案:

答案 0 :(得分:1)

这已在2.2版中修复 - 我建议升级。