Нет необходимости в Join
:
var mutualFriendsNames = db.Users
.Where(u =>
db.FriendShips.Any(f => f.FriendId == u.Id && f.UserId == 1) &&
db.FriendShips.Any(f => f.FriendId == u.Id && f.UserId == 2))
.Select(p => p.Name);
Просто обратите внимание, что это будет работать только в том случае, если дружеские отношения являются односторонними отношениями (если user1 является другом с user2, то user2 не является необходимым другом с user1).
Если отношение двухстороннее, у вас есть два варианта:
- Определить отношение как две строки в БД (каждая описывает путь).
- Это неявное двустороннее отношение, поэтому вы должны рефакторинг запроса LINQ выше:
var mutualFriendsNames = db.Users
.Where(u =>
db.FriendShips.Any(f =>
(f.FriendId == u.Id && f.UserId == 1) ||
(f.FriendId == 1 && f.UserId == u.Id)) &&
db.FriendShips.Any(f =>
(f.FriendId == u.Id && f.UserId == 2) ||
(f.FriendId == 2 && f.UserId == u.Id)))
.Select(p => p.Name);