Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用LINQ获取一个实体,其中包含一个子实体的大部分_C#_.net_Linq_Entity Framework_Linq To Entities - Fatal编程技术网

C# 使用LINQ获取一个实体,其中包含一个子实体的大部分

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

我在实体框架4中有一个名为
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秒:))如果我不正确并夸大了性能问题,请道歉。但是我仍然认为您将进行一次完整的表扫描,因为数据库本身无法真正根据计数进行索引。在您添加有关性能的注释之前,我已经写好了:)同意性能警告。。。