Nhibernate 复杂的(对我来说)询问
我有一段奇怪的关系 3类:经理、团队、车辆 团队对经理和车辆都有多对多的关系,但经理和车辆都不知道团队的任何信息,只知道单向映射 我有一个女经理。我想得到一个类型为T的不同列表项,该列表项的VehicleID位于具有指定ID的管理器的组中Nhibernate 复杂的(对我来说)询问,nhibernate,queryover,Nhibernate,Queryover,我有一段奇怪的关系 3类:经理、团队、车辆 团队对经理和车辆都有多对多的关系,但经理和车辆都不知道团队的任何信息,只知道单向映射 我有一个女经理。我想得到一个类型为T的不同列表项,该列表项的VehicleID位于具有指定ID的管理器的组中 var vehicles = Session.QueryOver<Group>(() => group) .Right.JoinQueryOver<Manager>(x => x.Manage
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>()
;
有两种类型的组。驾驶员类型=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();
所以,我离你越来越近了。我想你想要的是下面这样的东西
var list = session.QueryOver<Group>()
.Where(x => x.Manager.Id == managerID)
.Select(group=> group.Vehicle)
.TransformUsing(Transformers.DistinctRootEntity)
.List<Vehicle>();
我认为你所追求的是如下的东西
var list = session.QueryOver<Group>()
.Where(x => x.Manager.Id == managerID)
.Select(group=> group.Vehicle)
.TransformUsing(Transformers.DistinctRootEntity)
.List<Vehicle>();
好的,主要是找到了解决办法。我将提出另一个问题:
var sq = QueryOver.Of<VehicleGroup>(() => vehicleGroup)
.JoinQueryOver<Manager>(vg => vg.Managers)
.Where(man => man.Id == managerId)
.JoinQueryOver<VehicleBase>(() => vehicleGroup.Vehicles)
.Where(v => v.Id == item.VehicleId)
.Select(vg => vg.Id)
;
var vp = Session.QueryOver<Summary>(() => item)
.WithSubquery.WhereExists(sq)
.Take(10)
.List();
所以,这是可行的。然而,我不得不将地图添加到Summary.VehicleId中,这不是我想要做的,但现在它可以做了。好-基本上找到了解决方案。我将提出另一个问题:
var sq = QueryOver.Of<VehicleGroup>(() => vehicleGroup)
.JoinQueryOver<Manager>(vg => vg.Managers)
.Where(man => man.Id == managerId)
.JoinQueryOver<VehicleBase>(() => vehicleGroup.Vehicles)
.Where(v => v.Id == item.VehicleId)
.Select(vg => vg.Id)
;
var vp = Session.QueryOver<Summary>(() => item)
.WithSubquery.WhereExists(sq)
.Take(10)
.List();
所以,这是可行的。然而,我不得不将地图添加到Summary.VehicleId中,这不是我想要做的,但现在它可以做了