多对多 senf 引用的 LINQ 查询 table

LINQ query for many-to-many senf-reference table

我有 2 个 EF 型号:

    public class Medicament
{
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public Guid Id { get; set; }

    [Required]
    public string InternationalName { get; set; }

    public ICollection<MedicamentMedicaments> MedicamentMedicamentses { get; set; }
}

public class MedicamentMedicaments
{
    [Key]
    [Column(Order = 0)]
    public Guid MedicamentId { get; set; }

    [Key]
    [Column(Order = 1)]
    public Guid AnalogId { get; set; }

    public Medicament Medicament { get; set; }
    public Medicament Analog { get; set; }
}

例如Medicament药品内容:

我想通过 LINQ 查询通过药物 ID 接收药物类似物吗?

List<Analog> result = yourDbContext.MedicamentMedicaments.Where(t => t.MedicamentId == yourMedicamentId).Select(t => t.Analog).ToList()

 List<Analog> result = yourDbContext.Medicament.SelectMany(t => t.MedicamentMedicamentses).Where(t => t.MedicamentId == yourMedicamentId).Select(t => t.Analog).ToList()

 List<Analog> result = yourDbContext.Medicament.Where(t => t.Id == yourMedicamentId).SelectMany(t => t.MedicamentMedicamentses).Select(t => t.Analog).ToList()

我找到了解决方案:

var query = from medicament in Db.Medicaments
            where medicament.Id == medId
            from mm in Db.MedicamentMedicamentses
            where medicament.Id == mm.MedicamentId || medicament.Id == mm.AnalogId
            select medicament.Id == mm.MedicamentId ? mm.Analog : mm.Medicament;