Я пытаюсь создать социальное приложение, такое как Facebook, где вы можете добавлять людей в друзья.
Я хочу добавить раздел «Люди, которых вы можете знать», в котором будут все пользователи приложения. появляется, кроме ваших друзей.
Я создал модельный класс ApplicationUser, который имеет отношение «многие ко многим», так что у пользователя может быть несколько друзей. Вот определение класса ApplicationUser:
public class ApplicationUser : IdentityUser
{
public string Fullname { get; set; }
public DateOnly BirthDate { get; set; }
public string? ProfilePicUrl { get; set; }
public string Bio { get; set; }
public ICollection Users { get; set; }
public ICollection Friends { get; set; }
}
А вот определение класса модели User_Friend, которое отображает отношения M-N:
public class User_Friend
{
public int Id { get; set; }
public string UserId { get; set; }
public ApplicationUser User { get; set; }
public string FriendId { get; set; }
public ApplicationUser Friend { get; set; }
public DateTime FriendsSince { get; set; }
}
Вот мой код; он работает так, как ожидалось, но похоже, что должен быть лучший или более чистый способ
public IActionResult Index()
{
var claim = (ClaimsIdentity)User.Identity;
var user = claim.FindFirst(ClaimTypes.NameIdentifier);
//everyone ids except me
List AllIds = _context.applicationUsers
.Where(u => u.Id != user.Value)
.Select(x => x.Id).ToList();
// friends ids
List friendsIds = _context.user_Friends
.Where(u => u.UserId == user.Value)
.Select(x => x.FriendId)
.ToList();
// non-friends ids
List nonFriendsIds = AllIds.Except(friendsIds).ToList();
List nonFriends = new List();
if (user != null)
{
foreach (var x in nonFriendsIds)
{
nonFriends.Add(_context.applicationUsers.FirstOrDefault(u => u.Id == x));
}
}
return View(nonFriends);
}
Подробнее здесь: https://stackoverflow.com/questions/786 ... -know-sect