C# 使用LINQ获取一个实体,其中包含一个子实体的大部分
我在实体框架4中有一个名为C# 使用LINQ获取一个实体,其中包含一个子实体的大部分,c#,.net,linq,entity-framework,linq-to-entities,C#,.net,Linq,Entity Framework,Linq To Entities,我在实体框架4中有一个名为Topic的实体主题具有指向回复实体集合的导航属性 我正在尝试创建一个查询,根据回复数量获得最流行的主题 entityContainer.Topics.Single(x => x./* has the most replies of any topic */); 我不知道如何精心设计一个查询来完成这一点。这可能会完成您想要做的事情 var mostPopularTopic = entityContainer.Topics .OrderByDescendi
Topic
的实体<代码>主题具有指向回复
实体集合的导航属性
我正在尝试创建一个查询,根据回复数量获得最流行的主题
entityContainer.Topics.Single(x => x./* has the most replies of any topic */);
我不知道如何精心设计一个查询来完成这一点。这可能会完成您想要做的事情
var mostPopularTopic = entityContainer.Topics
.OrderByDescending(t => t.Replies.Count())
.FirstOrDefault();
if(mostPopularTopic != null) // If there were any topics...
{
// ...
}
我想这会有很糟糕的表现
一个更好的选择可能是对数据进行反规范化(稍微),并在主题
表中添加一个回复计数列。然后可以为该列编制索引,并对该行执行简单的排序和检索。这将避免对主题进行整表扫描,并避免对每个回复项进行计数(在查询时)
权衡的结果是,您必须小心确保回复次数始终得到更新,或者使用并非始终完全最新的结果,并执行后台工作来重建这些值。OrderByDescending
(刚刚删除了我的答案,速度太慢了10秒:))如果我不正确并夸大了性能问题,请道歉。但是我仍然认为您将进行一次完整的表扫描,因为数据库本身无法真正根据计数进行索引。在您添加有关性能的注释之前,我已经写好了:)同意性能警告。。。