I am trying to return a list with all the Chat Buddies of a User. Chat Buddies meaning, all the UsersID's,where in messages I am the Sender or the Receiver. Here is my code:
public List<string> GetUserMessagesGrouped(string userId)
{
var a = _context.Users.FirstOrDefault(x => x.Id == userId).SentMessages.Select(m => m.ReceiverID);
var b = _context.Users.FirstOrDefault(y => y.Id == userId).ReceivedMessages.Select(m => m.SenderID);
var ChatBuddies = a.Concat(b).Distinct();
return ChatBuddies.ToList();
}
The problem is: I am getting this Exception. System.ArgumentNullException: 'Value cannot be null.'
Although in my Database, this exact User I am testing has SentMessages and also ReceivedMessages.
Fixing points
var user = _context.Users.Include("ReceivedMessages").Include("SentMessages").FirstOrDefault(x => x.Id == userId);
var received = user.ReceivedMessages.Select(r => r.SenderID).ToList();
var sender = _context.Messages.Where(m => m.SenderID == userId).Select(s => s.ReceiverID).ToList();
var ChatBuddies = received.Union(sender).ToList();
return ChatBuddies;
The key was using .Include("ReceivedMessages").Include("SentMessages")
so that they weren't null
.