C# 列表的Join语句
我在C#和ASP.net中有一个表,它引用了另一个表的列表,其中多个车辆注册者映射到一辆车。我不想通过访问车辆注册人的个人成员(例如C# 列表的Join语句,c#,asp.net,nhibernate,C#,Asp.net,Nhibernate,我在C#和ASP.net中有一个表,它引用了另一个表的列表,其中多个车辆注册者映射到一辆车。我不想通过访问车辆注册人的个人成员(例如VehiclerRegistrantsalias[0])来浏览整个车辆注册人集合,因为我不知道会有多少人 我是否需要在两个查询中执行此操作?我真的很想一次完成这一切。我有作为车辆的父类和车辆注册人的子类集合。车辆注册人是基本类型,车辆注册人之下是车主和运营商。我还想从其他子表中提取信息。我从一辆车加入到另一辆车,这很好;不过,我也想拉主人和操作工 Vehicle v
VehiclerRegistrantsalias[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)
Vehicle-vehicleAlias=null;
列表车辆注册别名=空;
List VehiclerRegistrantSalias=null;
.JoinAlias(()=>vehicleAlias.VehiclerRegistrations,()=>VehiclerRegistrationAlias)
.JoinAlias(()=>车辆注册号,()=>车辆注册号)
//来自车辆登记人
.JoinAlias(()=>VehiclerRegistrantSalias[0],()=>VehiclerSuspensionTypeAlias)
将变量更改为:
VehicleRegistration vehicleRegistrationsAlias = null;
VehicleRegistrant vehicleRegistrantsAlias = null;
将JoinAlias行更改为:
.JoinAlias(() => vehicleAlias.VehicleRegistrations, () => vehicleRegistrationsAlias, NHibernate.SqlCommand.JoinType.LeftOuterJoin)
.JoinAlias(() => vehicleAlias.VehicleRegistrants, () => vehicleRegistrantsAlias, NHibernate.SqlCommand.JoinType.LeftOuterJoin)
查询将热切地获取
也可在列表前呼叫:
.TransformUsing(Transformers.DistinctRootEntity)
您也可以使用LINQ到NHibernate,它通常比QueryOverAPI更容易理解查询 根据评论,我猜您需要一个具有以下签名的函数:
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();
}
我不确定这是否正是你想要的,但我相信你明白了FetchMany(x=>x.vehiclerregistrants)
告诉NHibernate也为结果集中的每一辆vehiclerregistrants
获取所有vehiclerregistrants
,下面的ThenFetch(x=>x.Owner)
告诉“对于每一辆vehiclerregistrants
,也获取其所有者”
这有帮助吗?我能说得更清楚些吗?我很乐意详细说明。你在寻找什么,或者你想要的sql是什么样子的?sql将从孩子的集合中获取所有孩子的信息。有点像join语句中的foreach循环。我可以加入子集合而不仅仅是单个子集合吗?JoinAlias总是加入整个集合,别名表示变量so@JonathanO让我把它放在一起,如果我错了,重定向我,这样我可以帮助你,您有一个实体Vehicle
,它有一个子实体的集合vehiclerregistrant
,并且您想要查询具有特定注册表项的车辆,该注册表项具有操作员姓名或车主姓名,因此您想要类似的内容public Vehicle GetVehicle(vehiclerregistrant registant)
将返回一个车辆对象????谢谢
public Vehicle GetVehicle(VehicleRegistrant registrant)
{
var vehicle = session.Query<Vehicle>()
.FetchMany(x => x.VehicleRegistrants)
.ThenFetch(x => x.Owner)
.Where(x => x == registrant.Vehicle)
.SingleOrDefault();
}