Я пытаюсь создать социальное приложение, такое как 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