>假设我有以下内容:
(--> = 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( ... )
呵呵