私は奇妙な関係があります。複合語(私にとって)QueryOver
3クラス:マネージャー、グループ、自動車
グループはマネージャーと車の両方に多くの多くのがありますが、どちらもマネージャーも車両がグループ(一方向のみマッピング)について何を知っています。
私はManagerIDを持っています。私は、指定されたIDを持つマネージャを持つグループ内にあるVehicleIDを持つTタイプの別個のリスト項目を取得したい。
var vehicles = Session.QueryOver<Group>(() => group)
.Right.JoinQueryOver<Manager>(x => x.Managers)
.Where(x => x.Id == managerID)
.Select(Projections.Distinct(Projections.Property<VehicleGroup>(g => g.Vehicles)))
.List<Vehicle>()
;
ここで何ですか?
Ok、いくつかの追加情報: "Manager"はグループにマップされていません。 「車両」はグループにマップされていません。 グループには多数のマネージャがあります グループには多くの車両があります マネージャは複数のグループから参照できます。 車両は複数のグループで管理することができます。
私はマネージャIDを持っています。私は、そのマネージャーを持つグループから別個のビークルのリストを取得したい。
=========================
より:私はエミュレートしたい SQL:
select * from Summary
where [vehicleID] in
(
select [vehicleID] from [Managers]
inner join [Manager_Groups] on [Managers].[managerID] = [Manager_Groups].[managerID]
inner join [Groups] on [Manager_Groups].[groupID] = [Groups].[groupID]
inner join [Groups_Object] on [Groups].[groupID] = [Groups_Object].[groupID]
inner join [Vehicle] on [Groups_Object].[ID] = [Vehicle].[vehicleId]
where [Managers].[ManagerId] = 34 and [Groups].[type] = 1
)
グループの2種類があります。ドライバ(タイプ= 0)と車(タイプ= 1)
これまでのところ、私が持っている:
var sq = QueryOver.Of<Manager>(() => manager)
.Where(mf => mf.Id == managerId)
.Fetch(mf => mf.ManagedVehicleGroups).Eager
.TransformUsing(Transformers.DistinctRootEntity)
.JoinQueryOver<VehicleGroup>(mf => mf.ManagedVehicleGroups)
.SelectList(list => list.Select(mf => mf.ManagedVehicleGroups))
;
var vp = Session.QueryOver<VehiclePerformanceDay>(() => item)
.WithSubquery.WhereExists(sq)
.Take(10)
.List();
をし、これが生成します。
SELECT
TOP (10) this_. ~~~lots of fields removed~~~
FROM
dbo.Summary this_
WHERE
exists (
SELECT
this_0_.ManagerId as y0_
FROM
dbo.Managers this_0_
inner join
dbo.Manager_Groups managedveh3_
on this_0_.ManagerId=managedveh3_.managerID
inner join
dbo.Groups vehiclegro1_
on managedveh3_.groupID=vehiclegro1_.groupId
WHERE
this_0_.ManagerId = 34
);
だから、私が近づいてきています。