如何使用LINQ在实体框架中执行这种类型的JOIN

本文关键字:种类 类型 JOIN 执行 LINQ 何使用 实体 框架 | 更新日期: 2023-09-27 18:20:44

我有一个班级徽章:(例如)

**Badge**
 -User (Owned by)
 -Title (e.g votesOnThingReached5)

用户自己的徽章通过类UserBadge,(这是必需的)。

**UserBadge:**
  -User
  -Badge

因此:

myUser.UserBadges(); //Gets all user's current badges they own.
db.Badges(); //Gets all badges avaialble to be earnt.

我只需要获得用户当前没有的徽章。

我该如何写这个LINQ?下面是我的pseduo代码示例:

db.Badges(Where(b =>
new query(!myUser.UserBadges.contains(b));

如何使用LINQ在实体框架中执行这种类型的JOIN

您的Badge POCO上有Users集合吗?如果是:

db.Badges.Where(b => !b.Users.Any(u=>u.UserId == myUserId));

否则你可以做:

List<int> ownedBadges = myUser.Badges.Select(x=> x.BadgeId).ToList();
db.Badges.Where(b => !ownedBadges.Contains(b.BadgeId));
db.Badges.Where(b=>!myUser.UserBadges.Contains(b));