我在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/