在实体框架核心中过滤linq查询,多对多关系

时间:2017-12-05 14:07:48

标签: asp.net entity-framework asp.net-core entity-framework-core

我正在使用ASP Net Core 2。 我有一个测试模型:

public class Player
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Position { get; set; }
    public int Age { get; set; }

    [IgnoreDataMember]
    public ICollection<PlayerTeam> PlayerTeams { get; set; }
    public Player()
    {
        PlayerTeams = new List<PlayerTeam>();
    }
}
public class PlayerTeam
{
    public int PlayerId { get; set; }
    public Player Player { get; set; }

    public int TeamId { get; set; }
    public Team Team { get; set; }
}
public class Team
{
    public int Id { get; set; }
    public string Name { get; set; } // название команды
  //  [IgnoreDataMember]
    public ICollection<PlayerTeam> PlayerTeams { get; set; }
    public Team()
    {
        PlayerTeams = new List<PlayerTeam>();
    }
}

这是我的DBcontext:

public class FootbollContext: DbContext
{
    public DbSet<Player>  Players { get; set; }
    public DbSet<Team> Teams { get; set; }
    public FootbollContext(DbContextOptions<FootbollContext> options)
        : base(options)
    {

    }
    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {           

        modelBuilder.Entity<PlayerTeam>()
            .HasKey(t => new { t.TeamId, t.PlayerId });

    }
}

我的控制器中有一个查询:

FootbollContext db;
var teams = db.Teams.Select(team => new { 
    TeamName = team.Name,
    PlayersOlder20 = team.PlayerTeams.Where(pt => pt.Player.Age > 20).Select(s => s.Player)
});

并且它工作正常,但我想对此查询使用Include() / ThenInclude()方法,我希望得到相同的相同结果,即。

var teams = db.Teams.Include(p => p.PlayerTeams).ThenInclude(d => d.Player)

但我不想加载所有数据!而且我不知道如何在一个SQL查询中的相对表(不在selectable !!中)中按属性“Players age(&gt; 20)”过滤结果。

0 个答案:

没有答案