#c# #linq #.net-core
Вопрос:
Я пытаюсь объединить музыкантов и их инструменты в одном вызове api. До сих пор я пробовал использовать некоторые операторы linq, но пока это не работает. Можно ли это сделать с помощью linq? Это то, что у меня есть до сих пор:
// GET: api/Muziekants
[HttpGet]
public async Task<ActionResult<IEnumerable<Muziekant>>> GetMuziekants()
{
return await _context.Muziekants
.Include(m => m.Instruments)
.ThenInclude(i => i.MuziekantId)
.Include(m => m.Instruments)
.ToListAsync();
//return await _context.Muziekants.ToListAsync();
}
Вот как выглядит модель muziekant:
public class Muziekant
{
public int Id { get; set; }
[Required]
[MinLength(3, ErrorMessage = "Minimaal 3 karakters")]
[MaxLength(40, ErrorMessage = "Maximaal 40 karakters")]
public string Voornaam { get; set; }
[Required]
[MinLength(3, ErrorMessage = "Minimaal 3 karakters")]
[MaxLength(50, ErrorMessage = "Maximaal 50 karakters")]
public string Achternaam { get; set; }
[Required]
[Range(1900, 2022, ErrorMessage = "Jaar moet tussen 1900 en 2022 zijn")]
public int StartJaar { get; set; }
[Range(1900, 2022, ErrorMessage = "Jaar moet tussen 1900 en 2022 zijn")]
public int? StopJaar { get; set; }
public ICollection<Instrument> Instruments { get; set; }
}
И инструмент выглядит так:
public class Instrument
{
public int Id { get; set; }
[Required]
[MaxLength(40, ErrorMessage = "Maximaal 40 karakters")]
public string Naam { get; set; }
[MaxLength(30, ErrorMessage = "Maximaal 30 karakters")]
public string Type { get; set; }
[MaxLength(30, ErrorMessage = "Maximaal 30 karakters")]
public string Bijnaam { get; set; }
public int Waarde { get; set; }
[ForeignKey("Muziekant")]
public int? MuziekantId { get; set; }
}
Комментарии:
1. Какого типа отношений вы хотите? Один ко многим?
2. @Genusatplay да
Ответ №1:
Include
введено не для объединения, а для загрузки связанных сущностей, и на самом деле оно реализовано как соединение с другими таблицами, потому что это собственный способ SQL, как их загружать.
Этот запрос ближе к вашим потребностям, если у вас правильно определены свойства навигации.
// GET: api/Muziekants
[HttpGet]
public async Task<ActionResult<IEnumerable<Muziekant>>> GetMuziekants()
{
return await _context.Muziekants
.Include(m => m.Instruments)
.ToListAsync();
}