【问题标题】:LINQ query for friends feed: how to allow only my friends to see my post updates?LINQ 查询好友提要:如何只允许我的好友查看我的帖子更新?
【发布时间】:2011-12-03 15:28:24
【问题描述】:

我有一个 Web 应用程序,其中有一个 Diary,这个 Diary 有许多用户的许多帖子。我有我的帐户,我有我的日记,但只有我的朋友和关注者可以看到我的日记帖子。

我的问题是,我怎样才能只允许我的朋友和关注者看到我的日记帖子?这个查询如何?

我相信这个查询中只会插入 3 个表:

我的 DiaryPosts 表:

-------------------------
| ID | UserID | Content |
-------------------------

我的朋友表:

--------------------------
| ID | UserID | FriendID |
--------------------------

我的追随者表:

----------------------------
| ID | UserID | FollowerID |
----------------------------

我如何执行查询以选择一系列朋友并只允许他们查看我的日记帖子?

【问题讨论】:

  • 您真的要选择允许查看您帖子的人员列表,还是需要将用户看到的帖子过滤为您的规则允许的帖子?

标签: linq asp.net-mvc-3 c#-4.0 social-networking


【解决方案1】:

我认为您可能会倒退。您无需选择允许查看您帖子的人员范围。您需要将人们可以看到的帖子过滤为规则允许的帖子,不是吗?

如果是这种情况,那么对于任何正在寻找日记帖子的用户,如果出现以下任一情况,请返回帖子:

a) DiaryPosts 中的 UserID 是 Friends 中的 UserID,其中他们的 ID 是 FriendID,或者 b) DiaryPosts 中的 UserID 是 Followers 中的 UserID,他们的 ID 是 FollowerID

(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};

这应该会返回您是海报的朋友或追随者的所有帖子。如果您实际上只是想要一个可以查看您帖子的朋友和关注者 ID 列表,请告诉我,我会尝试发布。

【讨论】:

  • 我无法得到它,我正在尝试满足我的所有需求,但我做不到。还有其他样品吗?
【解决方案2】:

您的朋友和关注者个人 ID 列表:

var Result = Friends.Where(p=>p.UserID==YourId).Select(p=>p.FriendID)
.Concat(Followers.Where(p=>p.UserID==YourId).Select(p=>p.FollowerID))

【讨论】:

    猜你喜欢
    • 2015-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多