2012-05-08 30 views
1

ユーザーにもユーザーでもあるユーザーの集まりがある標準的なソーシャルネットワーキングのパラダイムがあります。エンティティフレームワーク多対多結合クエリ

私はエンティティFramworkコードファーストを使用していて、次のように私の友人関係が定義されている:

modelBuilder.Entity<User>() 
.HasMany(u => u.Friends) 
.WithMany() 
.Map(m => 
    { 
     m.ToTable("Friendships"); 
     m.MapLeftKey("UserId"); 
     m.MapRightKey("FriendId"); 
    }); 

私は何をしたい、それぞれが返されるかどうかの指標を持つすべてのユーザーを返す私のユーザーテーブルを検索することですユーザーは現在のユーザーと友人です。明らかにするために、友人であるユーザーと友人ではないユーザーを返すだけでなく、各ユーザーが友人であるかどうかを示すブール値を返したいと思います。私はTSQLでこれを基本的な左外部結合とする方法を知っています。

私はLINQで左結合を行う方法の例を見てきましたが、私が見たすべての例はマップされた型に結合しています。 My Friendships列にマップされたタイプがありません。

どのようにEntityFrameworkでこれを行うのですか?

答えて

1
var list = context.Users 
    .Where(u => u.Age >= 20) // sample condition, if you want ALL remove the line 
    .Select(u => new 
    { 
     User = u, 
     FriendOfCurrentUser = u.Friends.Any(f => f.UserId == currentUserId) 
    }) 
    .ToList(); 

結果は、ユーザーとブール値の友情インジケータを含む匿名オブジェクトのリストです。また、匿名型ではなく、UserWithFriendshipヘルパークラスを作成してプロジェクトに投影することもできます(Select(u => new UserWithFriendship { ... })。

関連する問題