. Net Core 3.1实体框架:获取不包含属性的所有记录



在我的Net Core 3.1项目中,我有以下模型:

public class Team
{
public int Id {get; set;
public string TeamName { get; set; }
public bool IsMainTeam { get; set; }
// relation with AppUser, the owner of the team
public string OwnerId { get; set; }
public AppUser Owner { get; set; }
// navigational planes for m2m with users
public ICollection<TeamsAppUsers> Members { get; set; }
}

public class TeamsAppUsers
{
public Guid AppUserId { get; set; }
public AppUser Member { get; set; }
public Guid TeamId { get; set; }
public Team Team { get; set; }
}
public class AppUser
{
public int Id{ get; set; }
public Guid ExtendedAppUserId { get; set; }
/// <summary>
/// The relation to the user's extended profile.
/// </summary>
public ExtendedAppUser ExtendedProfile {get; set;}
/// <summary>
/// Collection of teams this user is a member of.
/// </summary>
public ICollection<TeamsAppUsers> TeamsAppusers { get; private set; }
}

我想编写一个查询,其中返回所有团队,其中提供的userId不是OwnerId,也不在成员列表中(因此,TeamAppUsers中的AppUserId不等于提供的userId)。基本上,所有的团队都应该返回到与用户无关的地方……

我得到的是像这样的东西,但它不起作用:

var teams = await _context.Teams
.Include(t => t.Owner)
.Include(t => t.ExtendedTeamProfile)
.Include(t => t.Members)
.Where(t => t.Members.Any(m => m.AppUserId != userGuid) || t.OwnerId != userGuid)                    
.ToListAsync();

Members属性上的过滤似乎是这里的问题,欢迎任何帮助!

编辑:很明显,正如前面指出的,运算符应该是&&。关闭。

如果提供的userId不是OwnerId,则返回所有的团队不在成员列表中(强调我的)

然而在你的代码中你使用了||(即,或)。你不想要这样的东西吗?

var teams = await _context.Teams
.Include(t => t.Owner)
.Include(t => t.ExtendedTeamProfile)
.Where(t => !t.Members.Any(m => m.AppUserId == userGuid) && t.OwnerId != userGuid)                    
.ToListAsync();

TLDR:一大堆布尔值的否定问题。

最新更新