У меня есть две таблицы: АВТОМОБИЛЬ и ПАССАЖИР.Автомобиль может вместить несколько пассажиров.поэтому в таблице PASSENGER есть столбец vehicleId.Мне нужно отфильтровать и заказать мой вид, в котором отображаются транспортные средства по количеству пассажиров.
VehicleEntity и PassengerEntity используются для сопоставления с базой.
public class VehicleEntity
{
public virtual long DbId {get; set;}
public virtual string licence {get; set;}
public virtual ISet<PassengerEntity> Passengers {get; set;}
}
public class VehicleEntityMap : ClassMap<VehicleEntity>
{
Table("Vehicle");
Id(x => x.DbId)
Map(x => x.licence);
HasMany(x => x.Passengers).KeyColumn("VehicleDbID).Inverse();
}
и PassengerEntity
public class PassengerEntity
{
public virtual DbId {get; set;}
public virtual VehicleEntity Vehicle {get; set;}
}
public class PassengerEntityMap : ClassMap<PassengerEntity>
{
Table("Passenger");
Id(x => x.DbId)
References(p => p.Vehicle).Column("VehicleDbId).Index("IXFK_Passenger_Vehicle");
HasMany(x => x.Passengers).KeyColumn("VehicleDbID).Inverse();
}
Я управлял фильтрующей частью, используя следующее:
VehicleEntity v = null;
PassengerEntity p = null;
IQueryOver<VehicleEntity , VehicleEntity > orderQuery=
context.Session.QueryOver<VehicleEntity >(() => o);
orderQuery = orderQuery.Left.JoinAlias(() => o.Vehicles, () => v);
subQuery = QueryOver.Of<PassengerEntity>(() => p)
.Where(() => p.Vehicle.DbId == v.DbId)
.ToRowCountQuery();
orderFilterQuery = orderQuery.WithSubquery.WhereValue(2).Eq(sbuQuery);
Теперь мне нужно отсортировать автомобили по asc / desc в зависимости от количества пассажиров.