LINQ在选择匿名类型时如何包含嵌套属性?

4
我希望在每个消息中包含可选的List<Image>对象。我不想为每个会话都进行一次数据库往返。
通常,我只需选择对话并使用Include来包含所需属性,但该方法不支持嵌套集合上的Take,这是我的用例要求。
var conversations = await (from c in db.Conversations
          select new {
              conversation = c,
              messages = c.Messages.OrderByDescending(m => m.CreateDate).Take(50)
          }).ToListAsync();

现在,消息没有获取相关的List<Image>对象


匿名类型是问题吗?如果您选择将其转换为具体类型,会发生什么? - Robert Harvey
@RobertHarvey 我认为匿名类型并没有真正涉及到这个问题。我找不到一种方法来表达“我正在选择一堆对象,它们共同并不反映数据库中的表”的意思。如果我只是选择“c”,我可以使用include方法来实现我想要的效果。 - Nick H
1个回答

2
让你的消息成为一个包含你想要的属性的投影:
var conversations = await (from c in db.Conversations
      select new {
          conversation = c,
          messages = c.Messages.OrderByDescending(m => m.CreateDate)
             .Select(m => new {message = m, relatedThing = m.RelatedThing})
             .Take(50)
      }).ToListAsync();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接