Consider:
Class Client
Class Project
Class Ticket
Class Reply
Clients have a sub collection of projects, projects have a sub collecti
As Ladislav mentioned, Include
only works if you select the Ticket
entity directly. Since you're projecting other information out, the Include
gets ignored.
This should provide a good work-around:
var data = ctx.Set<Ticket>()
.Select(p => new
{
Ticket = p,
Clients = p.Client,
LastReplyDate = p.Replies.Max(q => q.DateCreated)
});
First of all, each Ticket's Clients will be accessible directly from the Clients
property on the anonymous type. Furthermore, Entity Framework should be smart enough to recognize that you have pulled out the entire Client
collection for each Ticket
, so calling .Ticket.Client
should work as well.
Another possibility is to use StriplingWarrior's solution but then cleanse the intermediate data from the final result:
var data = ctx.Set<Ticket>()
.Select(p => new
{
Ticket = p,
Clients = p.Client,
LastReplyDate = p.Replies.Max(q => q.DateCreated)
})
.AsEnumerable()
.Select(p => new
{
Ticket = p.Ticket,
LastReplyDate = p.LastReplyDate
});
Because Include
works only if you select entities directly. Once you do the projection Include
is ignored. I will not tell you why but it simply works this way.