Ho le seguenti 2 entità nel mio db.Contiene almeno il framework Entity
public class Article
{
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
// Some code removed for brevity
public virtual ICollection<Tag> Tags { get; set; }
}
public class Tag
{
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
// Some code removed for brevity
public virtual ICollection<Article> Articles { get; set; }
}
Ho bisogno di filtrare questi articoli in base agli ID tag che sono passati nella mia azione.
public ActionResult FindAll(List<int> tags)
{
//
// I need to return all articles which have ALL the tags passed into this method
//
var query = ApplicationDbContext.Articles...
}
Per esempio, se ho passato in 1, 2, 3 in azione, solo gli articoli che hanno avuto questi 3 tag o più sarebbe ritornato.
Come posso ottenere questo risultato?
Grazie per l'ottima risposta!
Tutte le risposte hanno prodotto il risultato corretto, quindi ho eseguito una rapida profilazione di base in sql e questo è stato il risultato in base alle tue domande.
Per i '' risposte all' Except' e, si potrebbe desiderare di controllare che le prestazioni sono accettabili per il carico ti aspetti, e che l'SQL generato funziona ancora se 'tags.Count' è grande. Vedi i commenti sotto [questo] (http://stackoverflow.com/questions/30947278/ef-intersect-syntax/30948394#comment49949396_30947688) per maggiori dettagli. * Potrebbe * valere la pena di interrogare un superset di articoli (con uno qualsiasi dei tag?) E ulteriori filtri. – jjj
se nessuna delle risposte ha funzionato o hai ancora problemi, fammi sapere così posso aiutarti – AmmarCSE
Sono curioso: quanti tag hai usato per questi test, quanto era grande la tabella 'Articoli' e quanto grande era il set di risultati? – jjj