1

2つのテーブル(BusinessUnitとUserBusinessUnit)で単純な結合を実行したいので、特定のユーザーに割り当てられたすべてのBusinessUnitのリストを取得できます。

最初の試みは機能しますが、返される列を制限できるSelectのオーバーライドはありません(両方のテーブルからすべての列を取得します)。

var db = new KensDB();
SqlQuery query = db.Select
 .From<BusinessUnit>()
 .InnerJoin<UserBusinessUnit>( BusinessUnitTable.IdColumn, UserBusinessUnitTable.BusinessUnitIdColumn )
 .Where( BusinessUnitTable.RecordStatusColumn ).IsEqualTo( 1 )
 .And( UserBusinessUnitTable.UserIdColumn ).IsEqualTo( userId );

2番目の試みでは列名の制限が許可されていますが、生成されたSQLには複数のテーブル名(?)が含まれています

SqlQuery query = new Select( new string[] { BusinessUnitTable.IdColumn, BusinessUnitTable.NameColumn } )
 .From<BusinessUnit>()
 .InnerJoin<UserBusinessUnit>( BusinessUnitTable.IdColumn, UserBusinessUnitTable.BusinessUnitIdColumn )
 .Where( BusinessUnitTable.RecordStatusColumn ).IsEqualTo( 1 )
 .And( UserBusinessUnitTable.UserIdColumn ).IsEqualTo( userId );

生産する...

SELECT [BusinessUnits].[Id], [BusinessUnits].[Name]
 FROM [BusinessUnits]
 INNER JOIN [UserBusinessUnits]
 ON [BusinessUnits].[Id] = [UserBusinessUnits].[BusinessUnitId]
 WHERE [BusinessUnits].[RecordStatus] = @0
 AND [UserBusinessUnits].[UserId] = @1

したがって、2つの質問:
-メソッド1で返される列を制限するにはどうすればよいですか?
-メソッド2が生成されたSQLの列名を複数形にするのはなぜですか(これを回避できますか?)

私は3.0.0.3を使用しています...

4

2 に答える 2

2

これまでのところ、3.0.0.3 での私の経験では、これはバージョン 2 では可能ですが、クエリ ツールではまだ不可能であることが示唆されています。

バージョン3で(これまでのところ)推奨される方法は、次のようなlinqクエリを使用することだと思います。

var busUnits = from b in BusinessUnit.All()
join u in UserBusinessUnit.All() on b.Id equals u.BusinessUnitId
select b;
于 2009-08-01T04:24:05.203 に答える
1

私自身、複数形のテーブル名に出くわしましたが、それは、スキーマを変更した後にテンプレートを 1 つしか再実行しなかったためです。

すべてのテンプレートを再実行すると、複数のテーブル名がなくなりました。

4 つのテンプレートすべてを再実行してみて、問題が解決するかどうかを確認してください。

于 2009-08-17T21:21:08.737 に答える