使用具有特定 属性 值的 ICollection 获取实体计数

Get Count on Entity with ICollection that has specific property value

我有一个名为 Renders 的模型。

public class Render
{
    public int RenderId { get; set; }
    public string ClientName { get; set; }
    public string Title { get; set; }

    public ICollection<Comment> Comments { get; set; }
}

以及该渲染实体中的评论集合,其模型如下所示:

public class Comment
{
    public int CommentId { get; set; }

    [Column(TypeName = "varchar(Max)"), DataType(DataType.MultilineText)]
    public string UserComment { get; set; }
    public bool CommentApproved { get; set; }

    public int RenderId { get; set; }
    public virtual Render Render { get; set; }

    public virtual ICollection<CommentImage> CommentImages { get; set; }
}

我需要获取所有具有 属性 CommentApproved 等于 true 的 Any Comments 的 Renders 的 Count()。

这是我尝试过的方法,但由于 Select 方法,它不起作用,我有点明白为什么它不起作用,但这是我唯一能弄清楚的方法编写实际上可以编译的内容。

private readonly RenderLibContext _db = new RenderLibContext();
....
var commented = _db.Renders.Include("Comments")
                   .Select(r => r.Comments.Where(c => c.CommentApproved)
                   .Count());

显然我的控制器中还有一些其他代码,但我想切题。我只是无法弄清楚如何让 Count() 方法起作用,并告诉我有多少渲染器有评论,其中 ApprovedComment 属性 为真。

我认为这可能有效:

var commented = _db.Renders.Include("Comments")
               .Where(c => c.CommentApproved)
               .Count());

我猜Select这里没必要

给你,

var count = _db.Renders.Count(render => render.Comments.Any(c => c.CommentApproved));