多对多 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药品内容:
- |药物编号 |模拟 ID |
- | 1 | 5 |
- | 5 | 3 |
我想通过 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;
我有 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药品内容:
- |药物编号 |模拟 ID |
- | 1 | 5 |
- | 5 | 3 |
我想通过 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;