2009-06-03 11 views
0

バージョン2.1のSubSonicを使用しています。私は、UserIdをパラメータとして使用しているユーザーのロールリストを取得する比較的簡単なクエリを構築するために構築しようとしています。Where()を使用すると、SubSonic.SqlQueryが正しく生成されません。

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]。[役割] [ID]、[DBO]を生成する(ユーザーIDは...文字列である)。[役割] [PID]、[ dbo] [名前] FROM [dbo]。[役割] INNER JOIN [dbo]。[UserRole] ON [dbo]。[ID] = [dbo]。[UserRole]。 [ユーザーID] WHERE [dbo]。[ユーザー]。[ID] [ユーザー] ON [dbo]。[ユーザーロール]。[ユーザーID] = [ = @ [dbo]。[User]。[Id] 0

これは失敗します。 Where [Where] .Where(Data.User.Columns.Id)を置換すると、クエリが生成されます。

SELECT [dbo]。[Id]、[dbo]。[Role]。[PID]、 [ユーザーロール]。[名前] [役割] INNER JOIN [dbo]。[ユーザーロール] ON [dbo]。[ロール]。[ID] = [dbo]。[ユーザーロール] [ユーザーID] [役割]。[ID] [ユーザー] ON [dbo]。[ユーザーロール]。[ユーザーID] = [ ] = @ Id0

Userテーブルの代わりにWhere句でRoleテーブルを使用します。

これはバグですか、間違っていますか?これを行う正しい方法は何でしょうか?ありがとう。

答えて

1

これはバージョン2.2で修正されています。アップグレードをお勧めします。

+0

ありがとうございます。それはそれを修正した。もはや私の文字列IDをintにキャストしようとしていません。 (私はちょうど数日前にSubSonicで始まったので、まだ騒ぎのように感じます。) ps: 私はちょうど数日前にAmazonでMVCの本を注文しました。私はそれを得るのを待つことができない! /flattery – Antoine

関連する問題