有没有机会简化此查询?我正在使用实体框架,当他们看到这种DRY违规时,我的眼睛在哭。数据库有一些典型的论坛项目表:用户,帖子,主题,类别 - 所有这些都是合适的导航属性。
GetMostActiveTopicByUserID为特定用户返回最活跃的主题(最活跃的=所有用户主题中发送最多的帖子)。
ActiveTopicDTO GetMostActiveTopicByUserID(int id)
{
var result = _databaseContext.Users.Where(q => q.ID == id)
.Select(user => new UserMostActiveTopicDTO()
{
TopicName = user.Posts.GroupBy(post => post.Topic.ID)
.OrderByDescending(post => post.Count())
.FirstOrDefault()
.FirstOrDefault()
.Topic.Name,
TopicAlias = user.Posts.GroupBy(post => post.Topic.ID)
.OrderByDescending(post => post.Count())
.FirstOrDefault()
.FirstOrDefault()
.Topic.Alias,
TopicCategoryDescription = user.Posts.GroupBy(post => post.Topic.ID)
.OrderByDescending(post => post.Count())
.FirstOrDefault()
.FirstOrDefault()
.Topic.Description
//and so on...
}).Single();
return result;
}
答案 0 :(得分:1)
您完全分组是基于Topic.ID然后您不需要一次又一次分组。请进行一次分组并返回如下结果,
CHANGE_TYPE_TO_TYPE_OF_RETURN-TYPE GetMostActiveTopicByUserID(int id)
{
return _databaseContext.Users
.Where(q => q.ID == id)
.Select(user =>
{
user.Posts.GroupBy(post => post.Topic.ID)
.OrderByDescending(post => post.Count())
.FirstOrDefault()
})
.Single();
}
然后从返回的结果中构建对象