我有一个标准的社交网络范例,其中一个用户拥有一群也是用户的朋友。
我正在使用Entity Framwork Code First,我的朋友关系定义如下:
modelBuilder.Entity<User>()
.HasMany(u => u.Friends)
.WithMany()
.Map(m =>
{
m.ToTable("Friendships");
m.MapLeftKey("UserId");
m.MapRightKey("FriendId");
});
我想要做的是搜索我的用户表,返回所有用户,并指示每个返回的用户是否是当前用户的朋友。为了清楚起见,我希望返回朋友和非朋友用户,以及指示每个用户是否是朋友的布尔值。我知道如何在TSQL中执行此操作,这是一个基本的左外连接。
我已经看到了如何在LINQ中进行左连接的示例,但我看到的所有示例都加入了映射类型。 “我的友谊”列没有“映射”类型。
我如何在EntityFramework中执行此操作?
答案 0 :(得分: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();
Result是包含用户和布尔友谊指示符的匿名对象列表。您还可以创建一个帮助器类UserWithFriendship
并将其投射到其中(Select(u => new UserWithFriendship { ... }
)而不是匿名类型。