Linq nHibernate加入并录制一张唱片

Linq nHibernate加入并录制一张唱片,linq,nhibernate,Linq,Nhibernate,我正在做下面的连接,有许多bookingActions记录,但我希望每个预订记录只有一个BookingAction记录。我想要具有最高主键值的BookingAction记录 我该怎么做 var bookingLocationsQuery = ( from booking in session.Query<Booking>() join bookingActions in session.Query<

我正在做下面的连接,有许多bookingActions记录,但我希望每个预订记录只有一个BookingAction记录。我想要具有最高主键值的BookingAction记录

我该怎么做

var bookingLocationsQuery = (
        from
            booking in session.Query<Booking>()
        join
            bookingActions in session.Query<BookingAction>() on booking.Id equals bookingActions.bookingId

        where
            (booking.bookingAdminID == userId)
        select new { booking, bookingActions }
    );
var bookingLocationsQuery=(
从…起
会话中的预订。查询()
参加
booking.Id上的session.Query()中的bookingActions等于bookingActions.bookingId
哪里
(booking.bookingAdminID==userId)
选择新建{预订,预订操作}
);
尝试使用
Max()
方法,例如:

var bookingLocation = session.Query<Booking>()
                      .Where(booking => booking.bookingAdminID == userId)
                      .Max(x => booking.bookingAdminID);
var bookingLocation=session.Query()
.Where(booking=>booking.bookingAdminID==userId)
.Max(x=>booking.bookingAdminID);

一些建议。首先,您应该利用NHibernate的
多对一
来为您进行连接,而不是手动进行连接。看起来你现在有这样的东西

public class BookingAction
{
    // ... other properties ...
    public virtual int bookingId { get; set; }
}

很抱歉将其切换为链式扩展方法语法-这对我来说更容易使用。它完全等同于。。。选择执行中的语法。

基本上与
var bookingLocation=userId相同。另外,在
内部,其中(…)
应该是一个lambda表达式。+1,回答很好,有关于映射的要点。顺便说一句,我使用这两个属性(int
作为readonly),但是对于关系,多对一执行连接技巧
<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>
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));