【问题标题】:Get Count on Entity with ICollection that has specific property value使用具有特定属性值的 ICollection 获取对实体的计数
【发布时间】:2015-01-21 12:00:22
【问题描述】:

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

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

这是我尝试过的,但由于 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 属性为 true 的 Comments。

【问题讨论】:

    标签: c# linq count icollection


    【解决方案1】:

    给你,

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

    【讨论】:

    • 看起来不错,我认为我的尝试有点太努力了..lol 现在重新编译和测试。
    • 嘘!天哪,我什至以与您在这里所做的相同的方式来组织我的问题。关键字.... ANY()!!!
    • Linq 是最好的。让事情变得简单,
    【解决方案2】:

    我认为这可能有效:

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

    Select 在这里我猜是没有必要的

    【讨论】:

    • 这个解决方案给了我一个编译器错误:“不明确的调用”它假定你的 lambdas c 值是一个渲染。
    • 这与我开始的地方非常相似:_db.Renders.Include("Comments").Count(r =&gt; r.Comments.Where(c =&gt; c.CommentApproved)); 这不起作用,但我认为这是正确的做法。
    • 好吧,你可以用SelectMany代替Include,因此后者不做类型检查。
    猜你喜欢
    • 1970-01-01
    • 2017-07-14
    • 2023-02-26
    • 1970-01-01
    • 2020-10-25
    • 1970-01-01
    • 2018-07-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多