【问题标题】:Using LINQ to get one entity with the most of a child entity使用 LINQ 获取一个具有最多子实体的实体
【发布时间】:2011-10-06 22:49:08
【问题描述】:

我在实体框架 4 中有一个名为 Topic 的实体。 Topic 具有指向 Reply 实体集合的导航属性。

我正在尝试制作一个查询,根据回复的数量获得最受欢迎的主题。

entityContainer.Topics.Single(x => x./* has the most replies of any topic */);

我不确定如何编写查询来完成此操作。

【问题讨论】:

    标签: c# .net linq entity-framework linq-to-entities


    【解决方案1】:

    这可能会完成您想要做的事情。

    var mostPopularTopic = entityContainer.Topics
        .OrderByDescending(t => t.Replies.Count())
        .FirstOrDefault();
    
    if(mostPopularTopic != null) // If there were any topics...
    {
        // ...
    }
    

    我想这会有很糟糕的表现,尽管如此。

    更好的选择可能是(稍微)非规范化数据并将回复计数列添加到Topic 表。然后您可以索引该列,并对行进行简单的排序和检索。这将避免对Topics 的全表扫描以及对每个Replies 条目的计数(在查询时)。

    权衡是您必须小心确保Replies 计数始终得到更新,或者接受并非总是完全最新的结果并执行后台工作来重建这些值。

    【讨论】:

    • OrderByDescending(刚刚删除了我的答案,10秒太慢了:))
    • 抱歉,如果我不正确并夸大了性能问题。但我仍然认为您将进行全表扫描,因为数据库无法真正根据计数建立索引。
    • 啊,我的第一条评论只与代码sn-p有关。在您添加有关性能的注释之前,我已经写了它:) 同意性能警告...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多