Hi,

I think the syntax is:

session.QueryOver<Parent>()
    .Fetch(p => p.Children).Eager
    .Fetch(p => p.Children[0].GrandChilden).Eager
    .List();

(Note, you don’t need List<Parent>(), just List() is enough when it matches the 
root query type).

If your collection is exposed as an IEnumerable, then you can use:

session.QueryOver<Parent>()
    .Fetch(p => p.Children).Eager
    .Fetch(p => p.Children.First().GrandChilden).Eager
    .List();

https://github.com/nhibernate/nhibernate-core/blob/master/src/NHibernate.Test/Criteria/Lambda/QueryOverFixture.cs#L731-L732

https://github.com/nhibernate/nhibernate-core/blob/master/src/NHibernate.Test/Criteria/Lambda/ExpressionProcessorFixture.cs#L107

Hope that helps.

Cheers,
    Richard


From: MiNG 
Sent: Thursday, March 14, 2013 2:13 AM
To: [email protected] 
Subject: [nhusers] How to fetch grandchildren by ISession.QueryOver<T>()

I have following entities: 

public class Parent
{
  public virtual Int32 Id {get; set;}
  public virutal IList<Child> Children {get; set;}
}

public class Child
{
  public virtual Int32 Id {get; set;}
  public virtual Parent Parent {get; set;}
  public virtual IList<GrandChild> GrandChildren {get; set;}
}

public class GrandChild
{
  public virtual Int32 Id {get; set;}
  public virtual Child Child {get; set;}
}

When using ICriteria, I can fetch the GrandChild by using SetFetchMode() like:
session.CreateCriteria<Parent>()
    .SetFetchMode("Children", FetchMode.Eager)
    .SetFetchMode("Children.GrandChildren", FetchMode.Eager) 
    .List<Parent>();

Now I want to convert the above code to using QueryOver API, but I cannot find 
the way to fetch the grandchildren except using the complex join methods (e.g. 
JoinAlias() or JoinQueryOver()).
Is there any way that can fetch the grandchildren easily ?
-- 
You received this message because you are subscribed to the Google Groups 
"nhusers" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/nhusers?hl=en.
For more options, visit https://groups.google.com/groups/opt_out.
 
 

-- 
You received this message because you are subscribed to the Google Groups 
"nhusers" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/nhusers?hl=en.
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to