Как сначала создать таблицу соединений, используя базовый код EF

  • Михаил
  • 12 мин. на прочтение
  • 121
  • 15 Nov 2022
  • 15 Nov 2022

С текущей структурой объекта вы можете написать соединение между всеми тремя наборами данных, а затем выполнить группировку по DeckId и получить результаты.

Я бы создал 2 класса модели представления для этого сгруппированного представления данных для моего представления.

public class DeckVm
{
    public int Id { set; get; }
    public string Name { set; get; }
    public IEnumerable<CardVm> Cards { set; get; }
}
public class CardVm
{
    public int Id { set; get; }
    public string Name { set; get; }
}

Теперь присоединиться

var decksWithCards = (from dc in db.DeckCards
                join d in db.Decks on dc.DeckID equals d.ID
                join c in db.Cards on dc.CardID equals c.ID
                select new { DeckId = d.ID, DeckName = d.Name,
                             CardId = c.ID, CardName = c.Name })
    .GroupBy(x => x.DeckId, d => d,
        (ky, v) =>
            new DeckVm
            {
                Id = ky,
                Name = v.FirstOrDefault().DeckName,
                Cards = v.Select(h => new CardVm { Id = h.CardId, Name=h.CardName})
            })
    .ToList();

decksWithCardsбудет a, List<DeckVm>который вы можете передать на свой взгляд. Вы должны сделать свое представление строго типизированным, чтобыList<DeckVm>