首页 > 解决方案 > 从两个表中选择条件的表中的记录

问题描述

我正在创建一个迷你社交媒体,在主页上我必须查看用户朋友的帖子我有三个表

public class Post
{
    [Key]           
    public int Id { get; set; }

    public string Date { get; set; }

    public string Text { get; set; }

    [DisplayName("PicturePath")]
    public string PicturePath { get; set; }

    public int interests { get; set; }

    public int userId { get; set; }


    public User user { get; set; }
}
public class User
{
    public int Id { get; set; }

    [Required]
    [MinLength(8)]
    [MaxLength(25)]        
    public string Name { get; set; }

    [DisplayName("Profile Picture")]
    public string PicturePath { get; set; }

    [Required]
    public string Specialization { get; set; }

    [Required]
    public string BirthDate { get; set; }

    [Required]
    public string Brief { get; set; }

    [Required]
    [EmailAddress]
    public string Email { get; set; }

    [Required]
    [DataType(DataType.Password)]
    [DisplayName("Password")]
    public string PasswordHash { get; set; }

    [DefaultValue(false)]
    public bool EmailConfirmed { get; set; }

    public virtual ICollection<Post> Posts { get; set; }

    public virtual ICollection<FriendShip> friendShip { get; set; }
    public virtual ICollection<ResetPassword> resetPassword { get; set; }

}
public class FriendShip
{

    public int Id { get; set; }

    public int UserId { get; set; }

    public int FriendId { get; set; }

    public string FriendShipDate { get; set; }


    public User user { get; set; }

}

我正在尝试选择属于登录用户的朋友的帖子。每个用户都有朋友(FriendShip 表中输入的朋友 ID)......所以我想预览来自朋友的所有帖子。查询表格将如何?

标签: asp.net-mvcentity-framework

解决方案


假设在您的 FriendShip 表上,一旦建立了“友谊”,您将添加两条记录,即 User-Friend(用户 ID = 当前用户 ID)和 Friend-User(用户 ID = 朋友的用户 ID)。

对于下面的 lambda 查询,请确保您已为 loggedInUserId 分配了登录用户的 ID。

  1. 首先我们做了一个用户朋友的数组
  2. 然后我们在另一个查询和 .contains() 中使用该数组,它将选择属于该数组中 ID 的所有帖子。
var friendsList = db.FriendShips.Where(f=>f.UserId == loggedInUserId).Select(f=>f.FriendId)ToArray();
List<Post> friendsPosts = db.Posts.Where(p=>friendsList.contains(p.userId))

推荐阅读