我有一个MessageThread实体,其中包含Message实体。设置了外键,因此我可以轻松地从MessageThread导航到所有消息。每条消息都有一个from和to地址。我想编写一个查询来检索特定地址已写入或接收消息的所有消息线程。
MessageThread
{
EntityCollection<Message> messages;
}
Message
{
long FromAccount;
long ToAccount;
}
查询应该是这样的,但我无法弄清楚如何从MessageThread
类一直导航到To和From地址。
public IQueryable<MessageThread> GetMessageThreads(long userAccount)
{
return from messageThread in this.ObjectContext.MessageThreads
where messageThread.Messages.ToAddress == userAccount ||
messageThread.Messages.FromAddress == userAccount
select messageThread;
}
该查询无效,因为messageThread.Messages是一个集合,ToAddress
和FromAddress
都无法直接从集合中访问。
答案 0 :(得分:0)
首先选择子项,然后包括父项。然后在最后,只需选择您所追求的父实体列表。
Messages.Include("MessageThread")
.Where(m => m.FromAccount == userAccount
|| m.ToAccount == userAccount)
.Select(m => m.MessageThread)
如果您将选择放在最后,您将获得包含父母的消息列表。这取决于你在哪里。
或....(这个,有点整洁)
MessageThreads.Where(s => s.Messages.Any( m => m.FromAccount == userAccount
|| m.ToAccount == userAccount))