C# 列表的Join语句

C# 列表的Join语句,c#,asp.net,nhibernate,C#,Asp.net,Nhibernate,我在C#和ASP.net中有一个表,它引用了另一个表的列表,其中多个车辆注册者映射到一辆车。我不想通过访问车辆注册人的个人成员(例如VehiclerRegistrantsalias[0])来浏览整个车辆注册人集合,因为我不知道会有多少人 我是否需要在两个查询中执行此操作?我真的很想一次完成这一切。我有作为车辆的父类和车辆注册人的子类集合。车辆注册人是基本类型,车辆注册人之下是车主和运营商。我还想从其他子表中提取信息。我从一辆车加入到另一辆车,这很好;不过,我也想拉主人和操作工 Vehicle v

我在C#和ASP.net中有一个表,它引用了另一个表的列表,其中多个车辆注册者映射到一辆车。我不想通过访问车辆注册人的个人成员(例如
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();
}