Ho visto alcune risposte a domande simili, tuttavia non riesco a capire come applicare la risposta al mio problema.Include condizionale() in Entity Framework
var allposts = _context.Posts
.Include(p => p.Comments)
.Include(aa => aa.Attachments)
.Include(a => a.PostAuthor)
.Where(t => t.PostAuthor.Id == postAuthorId).ToList();
Gli allegati possono essere caricati dall'autore (tipo Autore) o Collaboratore (tipo Contributor). Quello che voglio fare è ottenere solo gli allegati in cui il proprietario dell'allegato è di tipo Author.
So che questo non funziona e dà un errore:
.Include(s=>aa.Attachments.Where(o=>o.Owner is Author))
Ho letto di proiezione filtrata qui
EDIT - link all'articolo: : http://blogs.msdn.com/b/alexj/archive/2009/10/13/tip-37-how-to-do-a-conditional-include.aspx,
ma Non riesco a capirlo.
Non voglio includere il filtro nella clausola finale dove voglio TUTTI i post, ma voglio solo recuperare gli allegati per quei post che appartengono all'autore.
EDIT 2: - schema Post ha chiesto
public abstract class Post : IPostable
{
[Key]
public int Id { get; set; }
[Required]
public DateTime PublishDate { get; set; }
[Required]
public String Title { get; set; }
[Required]
public String Description { get; set; }
public Person PostAuthor { get; set; }
public virtual ICollection<Attachment> Attachments { get; set; }
public List<Comment> Comments { get; set; }
}
Puoi mostrarci lo schema 'Post' per favore? – DarkKnight
@DarkKnight - vedere modifica – grayson
@grayson Quello che stai chiedendo di fare non è possibile. 'Linq2Sql' convertirà il tuo codice in grezzo' SQL', e restituirà le righe figlio tramite un join. Non puoi fare questo tipo di join condizionale in 'SQL'. La tua unica opzione è rimuovere '.Include (aa => aa.Attachments)', e avere una seconda query che restituisce gli allegati a seconda che il proprietario sia o meno un autore/contributore. – Rob