2012-05-08 63 views
1

我有一個標準的社交網絡範例,其中一個用戶擁有一羣也是用戶的朋友。實體框架多對多連接查詢

我使用實體Framwork代碼首先,我的朋友關係被定義如下:

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

我想要做的就是尋找我的用戶表返回所有用戶的每個是否返回指標用戶是當前用戶的朋友。爲了清楚起見,我想要返回不是朋友的朋友和用戶的用戶,還要返回一個布爾值來指示每個用戶是否是朋友。我知道如何在TSQL中完成它的基本左外連接。

我見過如何在LINQ中執行左連接的示例,但我看到的所有示例都正在連接到映射類型。我的友誼列沒有映射類型。

如何在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 { ... })而不是匿名類型。