1

我有一个标准的社交网络范式,其中一个用户有一组也是用户的朋友。

我首先使用实体​​框架代码,我的朋友关系定义如下:

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

我想要做的是搜索我的用户表返回所有用户,并指示每个返回的用户是否是当前用户的朋友。为了清楚起见,我想返回是朋友的用户和不是朋友的用户,还要返回一个布尔值,指示每个用户是否是朋友。我知道如何在 TSQL 中做到这一点,它是一个基本的左外连接。

我已经看到了如何在 LINQ 中进行左连接的示例,但是我看到的所有示例都连接到映射类型。我的友谊列没有映射类型。

如何在 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 回答