bielu000
bielu000

Reputation: 2241

Load all children of entity

Hey I have following class:

public class Tree 
{
  public int Id { get; set; }
  public Tree Parent { get; set; }
  public ICollection Chidren { get; set; } 
}

I want to get all of related entities.

My tree structure looks like below:

- Root (id 1)
  -- Cat1 (id 2)
     --SubCat 1 (id 4)
     --SubCat 2 (id 5)
  -- Cat2 (id 3)

If I try to get all entities using:

_context.Entity.FirstOrDefault(x => x.Id == 1)
               .Include(x => x.Children)

it gaves me Root, cat1 and cat2 (as children), but Cat1 and Cat2 childrens are missing. Is it possible to get ALL related entities, starting from root entity, and ending at "children of children"?

Upvotes: 1

Views: 3451

Answers (1)

GGO
GGO

Reputation: 2748

Ok i understand.

Like explain here : Understanding .AsEnumerable() in LINQ to SQL

AsEnumerable() and ToList() send the SQL query to database. So you load all datas with all the children objects using SQL side, and then you filter on the ID in the code side.

If you do FirstOrDefault() in the SQL query you'll get only the tree who have id=1 and his first Children.

You can use :

 var tree = _context.Trees
        .Include(x => x.Children)
        .AsEnumerable()
        .FirstOrDefault(x => x.Id == 1);

But be careful, maybe you are loading so many datas and it can be very heavy and slow, depending to the database size.

Otherwise, you can load in 2 times, first the #1 element, and then his children.

Upvotes: 1

Related Questions