Я думаю, что вы можете идти об этом в обратном направлении.Вам не нужно выбирать людей, которым разрешено просматривать ваши сообщения.Вам нужно отфильтровать сообщения, которые люди могут видеть, к тем, которые разрешены правилом, не так ли?
Если это так, то для любого пользователя, который ищет записи в дневнике, верните сообщение, если либо:
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};
Это должновернуть все сообщения, где вы являетесь другом или подписчиком плаката.Если вам действительно нужен список идентификаторов друзей и подписчиков, которые могут видеть ваши сообщения, дайте мне знать, и я постараюсь опубликовать это.