LINQ-запрос для фида друзей: как разрешить только моим друзьям видеть мои обновления? - PullRequest
0 голосов
/ 03 декабря 2011

У меня есть веб-приложение, где у меня есть дневник, в этом дневнике много постов от многих пользователей. У меня есть аккаунт и дневник, но мои друзья могут видеть только мои друзья и подписчики.

Мой вопрос: как я могу разрешить только моим друзьям и подписчикам видеть мои записи в дневнике? Как будет этот запрос для этого?

Я полагаю, что в этот запрос будет вставлено только 3 таблицы:

Таблица «Мои дневники»:

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

Таблица моих друзей:

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

Таблица моих подписчиков:

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

Как я могу выполнить запрос, в котором я выбираю ряд друзей и разрешаю только им видеть мои записи в дневнике?

Ответы [ 2 ]

0 голосов
/ 03 декабря 2011

Список ваших друзей и подписчиков Идентификаторы лица:

var Result = Friends.Where(p=>p.UserID==YourId).Select(p=>p.FriendID)
.Concat(Followers.Where(p=>p.UserID==YourId).Select(p=>p.FollowerID))
0 голосов
/ 03 декабря 2011

Я думаю, что вы можете идти об этом в обратном направлении.Вам не нужно выбирать людей, которым разрешено просматривать ваши сообщения.Вам нужно отфильтровать сообщения, которые люди могут видеть, к тем, которые разрешены правилом, не так ли?

Если это так, то для любого пользователя, который ищет записи в дневнике, верните сообщение, если либо:

a) UserID в DiaryPosts - это UserID в Friends, где их ID - это FriendID, или b) UserID в DiaryPosts - это UserID в Followers, где их 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};

Это должновернуть все сообщения, где вы являетесь другом или подписчиком плаката.Если вам действительно нужен список идентификаторов друзей и подписчиков, которые могут видеть ваши сообщения, дайте мне знать, и я постараюсь опубликовать это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...