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