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

时间:2015-01-21 12:00:22

标签: c# linq count icollection

我有一个名为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; }
}

Render Entity中的一组评论,它的模型如下:

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; }
}

我需要获得所有具有任何注释的Renders的Count(),其属性为CommentApproved,等于true。

这就是我尝试过的,但是由于Select方法它没有用,我知道为什么它不起作用,但它是我能想到的唯一的东西如何编写实际编译。

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

显然我的控制器中还有一些其他代码,但我想提出问题。我只是在弄清楚如何让Count()方法工作并告诉我有多少Renders具有ApprovedComment属性为真的评论。

2 个答案:

答案 0 :(得分:2)

你走了,

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

答案 1 :(得分:1)

我认为这可行:

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

我猜这里不需要Select

相关问题