几个建议。首先,您应该利用 NHibernatemany-to-one
为您完成连接,而不是手动完成。看起来你目前有这样的事情......
public class BookingAction
{
// ... other properties ...
public virtual int bookingId { get; set; }
}
<class name="BookingAction">
<!-- ... other properties ... -->
<property name="bookingId" />
</class>
不要那样做。相反,您应该拥有:
public class BookingAction
{
// ... other properties ...
public virtual Booking Booking { get; set; }
}
<class name="BookingAction">
<!-- ... other properties ... -->
<many-to-one name="Booking" column="bookingId" />
</class>
类似的建议Booking.bookingAdminID
。它应该是一个many-to-one
to User
,而不仅仅是一个简单的属性。
其次,在你做出这些改变之后,你应该能够通过这样的查询来完成你的目标:
var subquery = session.Query<BookingAction>()
.Where(a => a.Booking.Admin.Id == userId)
.GroupBy(a => a.Booking.Id)
.Select(g => g.Max(a => a.Id));
var bookingActions = session.Query<BookingAction>()
.Fetch(a => a.Booking)
.Where(a => subquery.Contains(a.Id));
很抱歉将其切换为链式扩展方法语法 - 这对我来说更容易使用。它完全等同from ... select
于执行中的语法。