Nhibernate 复杂的(对我来说)询问

Nhibernate 复杂的(对我来说)询问,nhibernate,queryover,Nhibernate,Queryover,我有一段奇怪的关系 3类:经理、团队、车辆 团队对经理和车辆都有多对多的关系,但经理和车辆都不知道团队的任何信息,只知道单向映射 我有一个女经理。我想得到一个类型为T的不同列表项,该列表项的VehicleID位于具有指定ID的管理器的组中 var vehicles = Session.QueryOver<Group>(() => group) .Right.JoinQueryOver<Manager>(x => x.Manage

我有一段奇怪的关系

3类:经理、团队、车辆

团队对经理和车辆都有多对多的关系,但经理和车辆都不知道团队的任何信息,只知道单向映射

我有一个女经理。我想得到一个类型为T的不同列表项,该列表项的VehicleID位于具有指定ID的管理器的组中

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中,这不是我想要做的,但现在它可以做了