我有一个web应用程序,其中我有一个日记,这个日记有许多用户的许多帖子。我有我的账号,我有我的日记,但只有我的朋友和追随者可以看到我的日记帖子。
我的问题是,我怎么能只允许我的朋友和追随者看到我的日记帖子呢?这个查询是如何进行的呢?
我相信在这个查询中只会插入3个表:
我的DiaryPosts表:
-------------------------
| ID | UserID | Content |
-------------------------
我的朋友表:
--------------------------
| ID | UserID | FriendID |
--------------------------
我的关注者表:
----------------------------
| ID | UserID | FollowerID |
----------------------------
如果我选择了一系列朋友,并且只允许他们查看我的日记帖子,我该如何执行查询?
发布于 2011-12-03 15:58:35
我认为你可能是在倒退。您不需要选择允许查看您的帖子的人员范围。您需要将人们可以看到的帖子过滤为规则允许的帖子,不是吗?
如果是这种情况,则对于查找日记帖子的任何用户,如果出现以下情况,请返回该帖子:
a) DiaryPosts中的UserID是好友中的UserID,其中其ID是FriendID,或者b) DiaryPosts中的UserID是其ID为FollowerID的关注者中的UserID
(a)假设他们是你的朋友,但不一定相反。如果你是他们的朋友,但反之亦然,你想让他们看到你的帖子,你必须添加额外的逻辑。
因为您需要满足好友或关注者条件的行,所以您将需要左连接。
我没有时间来测试它,所以语法可能有点粗糙,但我认为你可以从下面这样的东西开始:
var x = from D in DiaryPosts
from Fr in Friends
where (w => w.UserID = D.UserID)
.DefaultIfEmpty()
from Fo in Followers
where (w => w.UserID == D.UserID)
.DefaultIfEmpty()
where Fr.FriendID = myID | Fo.FriendID = myID
select {D};
这应该会返回你是发帖人的朋友或追随者的所有帖子。如果你真的只是想要一个可以看到你的帖子的朋友和追随者If的列表,让我知道,我会试着发布它。
发布于 2011-12-03 16:02:42
好友和关注者Ids列表:
var Result = Friends.Where(p=>p.UserID==YourId).Select(p=>p.FriendID)
.Concat(Followers.Where(p=>p.UserID==YourId).Select(p=>p.FollowerID))
https://stackoverflow.com/questions/8368692
复制