1

私は、ユーザーがユーザーでもある友達のコレクションを持っているという標準的なソーシャルネットワーキングパラダイムを持っています。

私は最初にエンティティフレームワークコードを使用しており、友達関係は次のように定義されています。

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

私がやりたいのは、返された各ユーザーが現在のユーザーと友達であるかどうかを示すインジケーターを使用して、すべてのユーザーを返すユーザーテーブルを検索することです。明確にするために、友達であるユーザーと友達ではないユーザーを返しますが、各ユーザーが友達であるかどうかを示すブール値も返します。基本的な左外部結合であるTSQLでこれを行う方法を知っています。

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

EntityFrameworkでこれを行うにはどうすればよいですか?

4

1 に答える 1

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 { ... }

于 2012-05-08T22:08:19.817 に答える