Nhibernate 字典/映射上的条件API和左连接

Nhibernate 字典/映射上的条件API和左连接,nhibernate,criteria-api,nhibernate-criteria,Nhibernate,Criteria Api,Nhibernate Criteria,我有以下课程: public class Item { public int Id { get; set; } public IDictionary<int, ItemLocal> { get; protected set; } public ICollection<string> Tags { get; set; } public int DefaultLanguageId { get; set; } public DateTim

我有以下课程:

public class Item
{
    public int Id { get; set; }
    public IDictionary<int, ItemLocal> { get; protected set; }
    public ICollection<string> Tags { get; set; }
    public int DefaultLanguageId { get; set; }
    public DateTime Start { get; set; }
}

public class ItemLocal
{
    public virtual Item Parent { get; set; }
    public virtual int LanguageId { get; set; }
    public string Title { get; set; }
    public string Description { get; set; }
}
但是我不知道如何使用nhibernate标准api执行左连接。特别是使用默认语言选项


非常感谢您的帮助。

我找到了一个解决方案:

Session
   .CreateCriteria<Item>("i")
   .CreateCriteria("Localization", "l", NHibernate.SqlCommand.JoinType.LeftOuterJoin)
      .Add(Restrictions.Disjunction()
         .Add(Restrictions.EqProperty("i.DefaultLanguageId", "l.LanguageId"))
         .Add(Restrictions.IsNull("l.LanguageId"))
      )
   .AddOrder(Order.Asc("l.Title"))
   .AddOrder(Order.Asc("w.Id"));
会话
.CreateCriteria(“i”)
.CreateCriteria(“本地化”、“l”、NHibernate.SqlCommand.JoinType.LeftOuterJoin)
.Add(限制.析取()
.Add(限制.EqProperty(“i.DefaultLanguageId”、“l.LanguageId”))
.Add(Restrictions.IsNull(“l.LanguageId”))
)
.AddOrder(Order.Asc(“l.Title”))
.AddOrder(Order.Asc(“w.Id”));
这似乎是可行的,但会导致一个带有变通方法WHERE子句的查询。希望它能够呈现一个SQL查询,其中析取中定义的限制可能是外部左连接的一部分。。。在…上声明

Session
   .CreateCriteria<Item>("i")
   .CreateCriteria("Localization", "l", NHibernate.SqlCommand.JoinType.LeftOuterJoin)
      .Add(Restrictions.Disjunction()
         .Add(Restrictions.EqProperty("i.DefaultLanguageId", "l.LanguageId"))
         .Add(Restrictions.IsNull("l.LanguageId"))
      )
   .AddOrder(Order.Asc("l.Title"))
   .AddOrder(Order.Asc("w.Id"));