使用LINQ获取一个具有大部分子实体的实体

Che*_*hev 3 .net c# linq linq-to-entities entity-framework

我在实体框架4中有一个实体叫做Topic.Topic具有Reply实体集合的导航属性.

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

entityContainer.Topics.Single(x => x./* has the most replies of any topic */);
Run Code Online (Sandbox Code Playgroud)

我不确定如何制作查询来实现这一目标.

Mer*_*ham 5

这可能会实现您的目标.

var mostPopularTopic = entityContainer.Topics
    .OrderByDescending(t => t.Replies.Count())
    .FirstOrDefault();

if(mostPopularTopic != null) // If there were any topics...
{
    // ...
}
Run Code Online (Sandbox Code Playgroud)

我想这将是一个可怕的性能,tho.

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

需要注意的是,您必须小心确保Replies计数始终更新,或者使用并非总是完全是最新的结果并执行后台作业来重建这些值.