调整nHibernate查询

时间:2015-11-09 13:32:41

标签: c# nhibernate

我需要一些帮助来调整Nhibernate查询。

我有两个实体

public class Parent
{    
   public int Id {get; set; }    
   public List<Child> Childs {get; set; }
}

public class Child
{
   public int ChildId {get; set;}
   public Parent Parent {get; set;}
}

我需要返回一个List,它是所有父母的所有子列表的选择。 所以,我这样做了。

public IList<Child> GetChilds(IEnumerable<Parent> parents)
{
    var data = this.Sessao.QueryOver<Parent>()
                          .Where(Restrictions.In("Parent.Id", parents.Select(x => x.Id).ToList()))
                          .List();

    var childs = new List<Child>();

    foreach (var parent in data)
    {
        childs.AddRange(parent.childs);
    }

    return childs;
}

它有效,但它产生了一个选择以获得父母加上n选择获得孩子,我认为只有一个查询可以让所有孩子都得到。

1 个答案:

答案 0 :(得分:1)

您可以使用linq提供程序执行此操作:

public IList<Child> GetChilds(IEnumerable<Parent> parents)
{
    return this.Sessao.Query<Child>()
                      .Where(x => parents.Select(x => x.Id).ToList().Contains(x.Parent.Id))
                      .List();
}
使用QueryOver提供程序

或类似的内容:

public IList<Child> GetChilds(IEnumerable<Parent> parents)
{
    Parent parentAlias = null;
    this.Sessao.QueryOver<Wave>()
            .Inner.JoinAlias(x => x.Parent, () => parentAlias)
            .WhereRestrictionOn(() => parentAlias.Id).IsIn(parents.Select(x => x.Id).ToList())
}

以上示例是伪代码,因此它们可能不准确,但应该非常接近。