我正在努力解决linq问题。
我有以下型号:
public class Message
{
public Message()
{
Date = DateTime.Now;
MessageRecipients = new List<MessageRecipient>();
}
[Key]
public int MessageID { get; set; }
public string Body { get; set; }
public DateTime Date { get; set; }
public List<MessageRecipient> MessageRecipients { get; set; }
}
public class MessageRecipient
{
public MessageRecipient()
{
HasBeenRead = false;
}
[Key]
public int MessageRecipientID { get; set; }
public Message Message { get; set; }
public string User { get; set; }
public bool HasBeenRead { get; set; }
}
向多个邮件收件人发送邮件。我正在尝试编写一个查询,以获取特定用户的未读消息。
我可以为用户收到消息,但我似乎无法扩展查询以获取未读的消息:
public List<Message> GetMessageForUser(ApplicationUser user)
{
var messages = dbContext.Messages
.Where(x => x.MessageRecipients.Select(y => y.User).Contains(user.UserName))
.OrderByDescending(p => p.Date);
}
由于公司的决定,我没有在ApplicationUser和MessageRecipients之间使用外键链接 - 用户对象不依赖于其他对象,所以我们只通过用户名查询,而不是使用导航属性。 / p>
答案 0 :(得分:3)
您可以使用Any
扩展名并验证用户是收件人之一且邮件未读。
var messages = dbContext.Messages
.Where(x => x.MessageRecipients.Any(y => y.User ==.user.UserName && !y.HasBeenRead ))
.OrderByDescending(p => p.Date);
答案 1 :(得分:0)
var messages = dbContext.MessageRecipients
.Where(y => y.User ==.user.UserName && !y.HasBeenRead)
.Select(g=>g.Message)
.ToList()