LINQ To Entities + Include +匿名类型问题

Jer*_*oen 13 linq-to-entities entity-framework ef-code-first

考虑:

类客户

班级项目

班级门票

班级回复

客户有一个项目的子集合,项目有一个子集合的票证和票据有一个子集合的回复.

var data = ctx.Set<Ticket>().Include(p => p.Client).
Select(p => new { Ticket = p, LastReplyDate = p.Replies.Max(q => q.DateCreated)});
Run Code Online (Sandbox Code Playgroud)

不行.以这种方式选择数据时,既不加载项目也不加载客户端.

我知道如何让它发挥作用.我的问题是为什么它不能这样工作?

Str*_*ior 12

正如Ladislav所提到的,Include只有Ticket直接选择实体才有效.由于您正在预测其他信息,因此Include会被忽略.

这应该提供一个很好的解决方法:

var data = ctx.Set<Ticket>()
    .Select(p => new 
         { 
             Ticket = p, 
             Clients = p.Client,
             LastReplyDate = p.Replies.Max(q => q.DateCreated)
         });
Run Code Online (Sandbox Code Playgroud)

首先,每个Ticket的客户都可以通过Clients匿名类型直接从酒店访问.此外,实体框架应该足够聪明,以便认识到您已经Client为每个集合提取了整个集合Ticket,因此调用也.Ticket.Client应该起作用.


Lad*_*nka 5

因为Include只有直接选择实体才有效.一旦完成,投影将Include被忽略.我不会告诉你为什么,但它只是这样工作.