我有一个我试图查询的域名(省略了其他不重要的属性)和相关的映射:
// Domain:
public class Order
{
public virtual Site Release { get; set;}
public virtual Site Return { get; set;}
}
public class Site
{
public virtual Calendar { get; set; }
}
public class Calendar
{
public virtual IList<HolidayDate> Holidays { get; set; }
}
// Mapping:
public class OrderMap : ClassMap<Order>
{
public OrderMap()
{
References(x => x.Release);
References(x => x.Return);
}
}
public class SiteMap : ClassMap<Site>
{
public SiteMap()
{
Component(x => x.Calendar, component =>
{
component.Map(x => x.WorkingDays);
component.HasMany(x => x.Holidays).Cascade.AllDeleteOrphan();
});
}
}
我想查询所有订单,具有特定状态并加入Release
和Return
,但对于Release
,我还想加入Calendar
(这是一个组件映射实体)和日历我想加入所有假期(左外连接)。我尝试了几种不同的方式,但是一旦我尝试加入假期,我就会得到一个笛卡尔积(我假设我得到两个网站假期)。
我也尝试过期货(像这样):
var orders = Session.QueryOver<Order>()
.Where(x => x.Status == Selected.Status)
.Future<Order>();
Session.QueryOver<Order>()
.JoinAlias(x => x.Release, () => release, JoinType.LeftOuterJoin)
.JoinAlias(() => release.Calendar.Holidays, () => holiday, JoinType.LeftOuterJoin)
.Where(x => x.Status == Selected.Status)
.Future<Order>();
var output = orders.ToList();
...但我的假期仍然比预期的多。如果我可以找到一个查询,我还想过滤假期Date
&gt;今天约会。
是否可以执行此查询或是否有我错过的选项?