лямбда-выражение для выбора одной строки из родительской таблицы, в которой значение объекта объединяющей таблицы содержит конкретный c объект - PullRequest
0 голосов
/ 20 марта 2020

Я прошу прощения, если это дубликат, но я искал и не могу найти свой сценарий.

У меня есть «родительский» стол под названием «Турниры» и стол «Игроки», в котором находятся участники турниров. Это отношение многих ко многим, потому что у меня может быть несколько турниров, и одни и те же игроки (или больше или меньше) могут участвовать в каждом турнире.

Я создал таблицу соединения для того, чтобы позволить моим многим -мани отношения.

мои объекты выглядят так: TournamentEntity.cs

public class TournamentEntity : IInt32Identity
{
    public int Id { get; set; }
    ...
    public List<TournamentPlayers> Participants { get; set; }
}

TournamentPlayers.cs (это моя сущность соединения)

    public class TournamentPlayers
        {
            public int TournamentId { get; set; }
            public TournamentEntity Tournament { get; set; }
            public int PlayerId { get; set; }
            public PlayerEntity Player { get; set; }
        }

PlayerEntity.cs

public class PlayerEntity : IInt32Identity
{
    public int Id { get; set; }
    ...
    public List<TournamentPlayers> Participants { get; set; }
}

Я хотел бы вернуть список и / или один экземпляр TournamentEntity с простым лямбда-выражением из одного PlayerEntity, переданного в мой метод.

пример метода:

public async Task<TournamentEntity> GetTournamentByTournamentParticipant(PlayerEntity tournamentParticipant)
    {
            return await EntityDbSet
                .Where(x => x.Participants.Contains) // this is where I'm a bit lost on how to link to "tournamentParticipant"
                ...
                .Include(x => x.Participants)
                .ThenInclude(b => b.Player)
                .FirstOrDefaultAsync();
        }

заранее спасибо.

1 Ответ

1 голос
/ 20 марта 2020

Вы пробовали это

return await EntityDbSet
                .Where(x => x.Participants.Any(p => p.PlayerId == tournamentParticipant.Id))
                .Include(x => x.Participants)
                .ThenInclude(b => b.Player)
                .FirstOrDefaultAsync();
...