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)
我不确定如何制作查询来实现这一目标.
这可能会实现您的目标.
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计数始终更新,或者使用并非总是完全是最新的结果并执行后台作业来重建这些值.