我正在使用MVC开发一个原型平台,用户可以在其中制作个人资料并使用该个人资料制作文本帖子,例如社交媒体网站。我的数据库中有以下两个表:
配置文件
public partial class Profile
{
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
public Profile()
{
this.Posts = new HashSet<Post>();
}
public int Id { get; set; }
public string UserId { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Country_ { get; set; }
public System.DateTime DoB { get; set; }
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
public virtual ICollection<Post> Posts { get; set; }
}
}
帖子
public partial class Post
{
public int Id { get; set; }
public string Text { get; set; }
public System.DateTime DATE { get; set; }
public int ProfileId { get; set; }
public virtual Profile Profile { get; set; }
}
}
在我的ViewModel中,我有一个名为PostList的帖子列表,我希望用它填充用户所做的所有帖子记录。因此,我需要使用所有记录填充列表,其中Posts中的ProfileId等于Profile的Id,这取决于Profile中的UserId是否等于当前用户的Identity。
简而言之,我需要:
帖子列表=其中ProfileId = Profiles.Id其中Profiles.UserId = CurrentUserId的帖子。
有什么想法吗?我尝试了以下内容,但这是完全错误的:
var userId = User.Identity.GetUserId();
ViewModels.ProfileViewModel pVm = new ViewModels.ProfileViewModel();
pVm.PostList = db.Posts.Include(db.Profiles).Where(a => a.UserId == userId).ToList();
pVm.UserName = User.Identity.GetUserName();
return View(pVm);
答案 0 :(得分:0)
您只需在查询中查看关系:
pVm.PostList = db.Posts.Where(a => a.Profile.UserId == userId);
没有必要使用Include
,因为Profile
将自动加入以进行查询。