说我有以下内容:
( - > = 1到1个实现为EF代码优先的集合)
消息 - > UserMessage
消息 - >附件
当我致电以下时间时:
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 变量可以保存所有附件,但即使有行也是空的。我错过了什么?
答案 0 :(得分:1)
你的情况没有意义,我甚至认为它没有编译
你说,你希望res
能够拥有所有附件。为什么要这样?您甚至不在查询中的任何位置使用附件
没有你的实际课程,建议正确的方法有点难,但我认为它会是这样的:
var res = _ctx.DataContext.UserMessage.Where(x => x.UserId == currentUserId)
.SelectMany(m => m.Message.Attachments)
.ToList();
现在,res
包含标识为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;}
}
答案 1 :(得分:0)
在上下文中,需要告知它使用诸如
之类的包含来获取导航属性_ctx.UserMessage.Include("Attachments")
.SelectMany( ... )
HTH