Ho un'entità simile a questa (parzialmente rimossa per brevità, include molte altre proprietà):
public class Tender
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
public string CreatorId { get; set; }
[ForeignKey("CreatorId")]
public virtual AppUser Creator { get; set; }
public ICollection<TenderCircle> TenderCircles { get; set; } = new List<TenderCircle>();
}
La proprietà TenderCircles
viene utilizzata per fornire una relazione molti-a-molti con un'altra entità denominata Circle
. TenderCircle
entità TenderCircle
presenta così:
public class TenderCircle
{
public int TenderId { get; set; }
[ForeignKey("TenderId")]
public Tender Tender { get; set; }
public int CircleId { get; set; }
[ForeignKey("CircleId")]
public Circle Circle { get; set; }
}
Ora, sto facendo la seguente query (parzialmente rimossa per brevità, normalmente include molte altre istruzioni Include
e ThenInclude
):
return _context.Tenders
.Include(t => t.Creator)
.Include(t => t.TenderCircles.Select(tc => new { CirlceId = tc.CircleId, TenderId = tc.TenderId }))
.ToList();
Ma semplicemente non funziona. Quello che voglio ottenere è che voglio solo ottenere le proprietà TenderId
e CircleId
da TenderCircle
e ignorare gli oggetti Tender
e Circle
effettivi. Qualche idea su come ottenere questo in EF Core ?
Scrivi la tua richiesta come segue:
return _context.Tenders.Select(t => new TenderViewModel
{
Id = t.Id,
Creator = t.Creator,
TenderCircles = t.TenderCircles.Select(tc => new TenderCircle { CirlceId = tc.CircleId, TenderId = tc.TenderId }).ToList();
}).ToList();
Quindi TenderViewModel
come segue:
public class TenderViewModel
{
public int Id { get; set; }
public AppUser Creator { get; set; }
public List<TenderCircle> TenderCircles { get; set; }
}