Если допустимо выполнить 2 запроса к базе данных, чтобы получить данные для обоих случаев, вы можете использовать следующие запросы
//chats that contain user1 and user2
var chats1 = context
.Chats
.Where(c => c.UserChats.Any(u => u.UserId == userId1))
.Where(c => c.UserChats.Any(u => u.UserId == userId2))
.ToList();
//chats that contain user1 and user2 and they are only users in chat
var chats2 = context
.Chats
.Where(c => c.UserChats.Any(u => u.UserId == userId1))
.Where(c => c.UserChats.Any(u => u.UserId == userId2))
.Where(c => c.UserChats.Count() == 2)
.ToList();
Если вы хотите получить все данные в 1 запросе, вы можете объявить новый класс, который содержитнеобходима информация о чате
public class ChatDto
{
public Guid Id { get; set; }
public int UserCount { get; set; }
}
и выполните следующий запрос
var chats = context
.Chats
.Where(c => c.UserChats.Any(u => u.UserId == userId1))
.Where(c => c.UserChats.Any(u => u.UserId == userId2))
.Select(c => new ChatDto
{
Id = c.Id,
UserCount = c.UserChats.Count()
})
.ToList();
Поэтому у вас будут чаты, содержащие user1 и user2 и всегоколичество пользователей в чате.