【问题标题】:Join in get api request one to many加入get api request一对多
【发布时间】:2021-09-01 13:37:08
【问题描述】:

我正在尝试让 muziekants 和他们的乐器加入一个 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; }
}

【问题讨论】:

  • 你想要什么类型的实体关系?一对多?
  • @Genusatplay 是的

标签: c# linq .net-core


【解决方案1】:

Include 引入不是为了加入而是为了加载相关实体,实际上它是作为连接到其他表来实现的,因为它是如何加载它们的原生 SQL 方式。

如果您已正确定义导航属性,则此查询更接近您的需求。

// GET: api/Muziekants
[HttpGet]
public async Task<ActionResult<IEnumerable<Muziekant>>> GetMuziekants()
{
    return await _context.Muziekants
       .Include(m => m.Instruments)
       .ToListAsync();
}

【讨论】:

    猜你喜欢
    • 2022-08-03
    • 1970-01-01
    • 2023-02-07
    • 2013-08-06
    • 1970-01-01
    • 1970-01-01
    • 2019-12-19
    • 2016-04-09
    • 1970-01-01
    相关资源
    最近更新 更多