加入声明列表

jon*_*odo 10 c# asp.net nhibernate

我在C#和ASP.net中有一个表,它引用了另一个表的列表,其中几个车辆注册者被映射到单个车辆.我不想通过访问他们的个人会员(例如vehicleRegistrantsAlias[0])访问整个车辆注册人的集合,因为我不知道会有多少人.

我需要在两个查询中执行此操作吗?我真的很愿意一起完成.我有父母班作为车辆和儿童车辆登记人的集合.车辆登记人是基本类型,车辆登记人是车主和经营人.我还想从其他子表中提取信息.我正在加入车辆到车辆的工作人员,工作正常; 但是,我也想拉主人和操作员.

Vehicle vehicleAlias = null;
List<VehicleRegistration> vehicleRegistrationsAlias = null; 
List<VehicleRegistrant> vehicleRegistrantsAlias = null; 

.JoinAlias(() => vehicleAlias.VehicleRegistrations, () => vehicleRegistrationsAlias)
.JoinAlias(() => vehicleAlias.VehicleRegistrants, () => vehicleRegistrantsAlias)

//from vehicle registrants
.JoinAlias(() => vehicleRegistrantsAlias[0]., () => vehicleSuspensionTypeAlias)
Run Code Online (Sandbox Code Playgroud)

two*_*wer 2

您也可以使用 LINQ to NHibernate,它通常比 QueryOver API 更容易理解查询。

根据评论,我猜您想要一个具有以下签名的函数:

public Vehicle GetVehicle(VehicleRegistrant registrant)
{
    var vehicle = session.Query<Vehicle>()
                         .FetchMany(x => x.VehicleRegistrants)
                         .ThenFetch(x => x.Owner)
                         .Where(x => x.VehicleRegistrants.Contains(registrant))
                         .SingleOrDefault();
}
Run Code Online (Sandbox Code Playgroud)

VehicleRegistrant或者,如果您在从到 其父级 的方向上有关系Vehicle,这也可以

public Vehicle GetVehicle(VehicleRegistrant registrant)
{
    var vehicle = session.Query<Vehicle>()
                         .FetchMany(x => x.VehicleRegistrants)
                         .ThenFetch(x => x.Owner)
                         .Where(x => x == registrant.Vehicle)
                         .SingleOrDefault();
}
Run Code Online (Sandbox Code Playgroud)

我不确定这是否正是您想要的,但我相信您已经明白了。FetchMany(x => x.VehicleRegistrants)告诉 NHibernate 也获取结果集中的所有VehicleRegistrantsfor every ,下面的内容告诉“对于其中的每一个,也获取它的”。VehicleThenFetch(x => x.Owner)VehicleRegistrantsOwner

这有帮助吗?