查询数据库中的“提要”

时间:2015-04-24 17:41:18

标签: c# sql asp.net linq

我希望这不是太开放的结果。我有一个包含多个用户的Web应用程序。用户可以是朋友,我有一个“提要”页面,用户可以在其中查看他/她朋友的所有帖子,合并。几乎就像Facebook或Reddit一样。我有这个工作,但像一个很好的小堆栈溢出用户,我没有过早优化,我做的方式是非常粗糙的:

var visitSet = new HashSet<Post>();
foreach (Friend friend in currentUser.Friends)
{
    var newSet = friend.Posts as HashSet<Post>;
    visitSet.UnionWith(newSet);
}
var currentUserVisitSet = currentUser.Posts as HashSet<Post>;
visitSet.UnionWith(currentUserVisitSet);
return visitSet.OrderByDescending(visit => visit.Score);

它有效,但对于一个中等大小的帖子来说,这是令人担忧的。这是在C#中所以我更喜欢使用一个聪明的LINQ查询,但我很难想出一个有效的。

另外,我担心在visit.Score订购。我以前在visit.DateVisited订购,Score是一个吸气剂,它做了一些计算,以找出帖子的“兴趣”得分。显然,这样做的开销比我刚才使用日期要多 - 所以我也有兴趣找出这样做的“标准”方法(某种启发式方法?怎么样?)。我不想在这里重新发明轮子,因为每个社交网络都做过这件事。

是否有任何提示以有效和简单的方式实现这一目标?

1 个答案:

答案 0 :(得分:0)

尝试将朋友帖子列表合并为一个LINQ操作:

var postFriends = new HashSet<Post>(currentUser.Friends.Select(f => f.Posts));

我认为这是你最大的瓶颈。