我有三个 db 类和相应的viewModel
:
public class User
{
public string Id{get;set;}
public string Name{get; set;}
public string Email{get; set;}
}
public class Post
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public long Id{get; set;};
public string Title{get; set;}
public string Content{get; set;}
}
public class Comment
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public long Id { get; set; }
public long PostId { get; set; }
[ForeignKey("PostId")]
public Post Post { get; set; }
public string Content{get;set;}
}
并且有三个services
用于与database
.
我想获得五个写最多帖子(第一个列表)并且对帖子有最多评论的用户。
为此,我有另一个视图模型。
public class TopContributorViewModel
{
public string UserName { get; set; }
public long PostCount { get; set; }
public long CommentCount { get; set; }
}
我有一个控制器。使用 LINQ 查询获得该结果的最佳方法是什么?
当然还有相应的 Repository 用于通信 db。
由于用户可以创建并拥有帖子和评论,因此应该有帖子和评论表的两个引用。喜欢
public class User
{
public string Id{get;set;}
public string Name{get; set;}
public string Email{get; set;}
public ICollection<Post> Posts { get; set; }
public ICollection<Comment> Comments { get; set; }
}
在此之后,您可以通过 linq 轻松查询。在控制器中,
public class YourController : Controller
{
private readonly IUserService _user;
public YourController(IUserService user)
{
_user = user;
}
public ActionResult YourMethod()
{
var model = _user.GetResult();
return View(model);
}
}
在服务中,
public class UserService : IUserService
{
private readonly IUserRepository _user;
public UserService(IUserRepository user)
{
_user=user;
}
public List<TopContributorViewModel> GetResult()
{
var result = _user.FindAll(u => u.Active)
.Include(p=>p.Posts)
.Include(p=>p.Comments)
.Select(model=>new TopContributorViewModel
{
UserName = model.Name,
UserId = model.Id,
PostCount = model.Posts.Count(u=>u.IsPublished==true && u.UserId==model.Id),
CommentCount = model.Comments.Count(u => u.IsPublished == true && u.UserId == model.Id)
});
return result.ToList();
}
}
谢谢你。继续前进!!!!!
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句