2011-12-03 11 views
0

私は日記を持っているWebアプリケーションを持っていますが、この日記は多くのユーザーの多くの投稿を持っています。私は自分のアカウントを持っていて、私は日記を持っていますが、私の友人や信者だけが私の日記を見ることができます。友達フィードのLINQクエリ:自分の投稿だけを友だちに見せる方法

私の質問は、自分の友達やフォロワーだけに私の日記の投稿を見せることができますか?この質問はどのようにして行われますか?

私は唯一の3つのテーブルがこのクエリに挿入されるだろうと考えている:

マイDiaryPostsテーブル:

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

マイフレンドテーブル:

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

私のフォロワーテーブル:

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

どのように私は友人の範囲を選択し、彼らだけ私の日記の投稿を表示できるようにクエリを実行することができますか?

+0

は、あなたが本当に人々のリストを選択しますかは、あなたの投稿を見ることを許可、またはユーザーが許可にのみ見て投稿をフィルタリングする必要がありますかあなたのルールによって? – nycdan

+0

私は投稿をフィルタリングする必要があります)= –

答えて

0

あなたはこれを後ろ向きにしていると思います。あなたはあなたの投稿を見ることを許可された人々の範囲を選択する必要はありません。ルールで許可されている投稿にフィルタで表示する必要がありますか?

その場合は、その後、日記の記事を探しているすべてのユーザーのために、いずれかの場合はポストを返す:

A)DiaryPostsでユーザーIDが自分のIDがFriendIDある友人でユーザーID、または BでありますDiaryPostsのUserIDはFollowerの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のリストがほしいと思っているなら、私に知らせてください。私はそれを投稿しようとします。あなたの友人やフォロワーの

+0

私はそれを得ることができませんでした、私は私のすべてのニーズで要求を実行しようとしていますが、私はそれを行うことはできません。他のサンプル? –

0

一覧人のIds:

var Result = Friends.Where(p=>p.UserID==YourId).Select(p=>p.FriendID) 
.Concat(Followers.Where(p=>p.UserID==YourId).Select(p=>p.FollowerID)) 
関連する問題