Ho 2 entità che descrivono Post
e Comments
.
public class Post
{
public int Id { get; set; }
public ICollection<Comment> Comments { get; set; }
//other properties
//Unmapped property
public int NumberOfComments { get; set; }
}
public class Comment
{
public int Id { get; set; }
public Post Post { get; set; }
public int PostId { get; set; }
// other properties
}
Ora voglio che la proprietà NumberOfComments
sia popolata con il conteggio effettivo dei commenti del post.
Ho provato a proiettare i risultati della query in una raccolta di modelli di post non ha funzionato.
Ho provato a unirmi al tavolo e poi raggruppati per ID post non sembra funzionare.
Non posso semplicemente return p.Comments.Count;
come definizione della proprietà poiché non includo i commenti durante la query. Voglio solo il conteggio dei commenti, non l'intera raccolta in memoria.
Questo è il modo in cui ho scoperto di farlo.
Le seguenti classi sarebbero necessarie:
public class PostExtraData
{
public Post post { get; set; }
public int NumberOfComments { get; set; }
}
public class Post
{
public int Id { get; set; }
public ICollection<Comment> Comments { get; set; }
//other properties
}
public class Comment
{
public int Id { get; set; }
public Post Post { get; set; }
public int PostId { get; set; }
// other properties
}
Non aggiungere la classe PostExtraData
al contesto.
E nel controller abbiamo scritto quanto segue (in questo caso, per ottenere l'elenco dei post):
return _context.Post
.Select(p => new PostExtraData
{
Post= p,
NumberOfComments = p.Comments.Count(),
})
.ToList();