ef code first - 如何在 LINQ 中选择嵌套在另一个集合中的集合



>假设我有以下内容:

(--> = 1 到 EF 代码优先中作为集合实现的多个)

消息 --> 用户消息

消息 -->附件

当我打电话给以下电话时:

var res = _ctx.DataContext.UserMessage.Where(x => x.UserId)
                                      .Select(m => m.Message).ToList();

编辑:添加的类:

public class Message
{
    public int MessageId { get; set; }
    public ICollection<Attachment> Attachments { get; set; }
    [Required]
    public string Text { get; set; }      
}

    public class Attachment
    {
        public int AttachmentId { get; set; }
        public int MessageId { get; set; }
        public virtual Message Message { get; set; }
        public string FileServerPath { get; set; }
    }

    public class UserMessage
    {
        public int UserMessageId { get; set; }
        [Required]
        public int MessageId { get; set; }
        public Message Message { get; set; }
        [Required]
        public int UserId { get; set; }
        public User User { get; set; }        
    }

我希望 res 变量能够保存所有附件,但即使有行,它也是空的。 我错过了什么?

你的 where 条件没有意义,我什至不认为它编译。
你说,你希望res持有所有的附件。为什么呢?您甚至不会在查询中的任何位置使用附件。
如果没有您的实际课程,很难提出正确的方法,但我认为它会是这样的:

var res = _ctx.DataContext.UserMessage.Where(x => x.UserId == currentUserId)
                                      .SelectMany(m => m.Message.Attachments)
                                      .ToList();

现在,res包含ID为currentUserId的用户的所有邮件的所有附件。

我假设了这样的类布局:

class UserMessage
{
    public int UserId {get;set;}
    public Message Message {get;set;}
}
class Message
{
    public IEnumerable<Attachment> Attachments {get;set;}
    // Irrelevant for the query in its current form:
    public IEnumerable<UserMessage> UserMessages {get;set;}
}

在上下文中,需要告诉它获取带有包含的导航属性,例如

_ctx.UserMessage.Include("Attachments")
                .SelectMany( ... )

相关内容

  • 没有找到相关文章

最新更新