我在C#和ASP.net中有一个表,该表引用另一个表的列表,在该表中,多个车辆注册人映射到单个车辆。我不希望通过访问车辆登记者的各个成员(例如vehicleRegistrantsAlias[0])来浏览整个车辆登记者集合,因为我不知道会有多少人。

我需要在两个查询中执行此操作吗?我真的很想一口气做这件事。我有一个父类的车辆,一个子级的车辆注册人。车辆登记者是基本类型,在车辆登记者之下是所有者和运算符(operator)。我还想从其他子表中提取信息。我正在从一个车辆到另一个车辆登记员加入,效果很好;但是,我也想拉所有者和运算符(operator)。

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)

最佳答案

您也可以使用LINQ进行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();
}

或者,如果您在从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();
}

我不确定这是否正是您想要的,但我相信您会明白。 FetchMany(x => x.VehicleRegistrants)告诉NHibernate也获取结果集中每个VehicleRegistrants的所有Vehicle,下面的ThenFetch(x => x.Owner)告诉“并且对于每个VehicleRegistrants,也获取其Owner”。

这有帮助吗?

关于c# - 加入声明 list ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7687701/

10-11 01:51