Ciao Sto usando MVC 5
e Entity Framework 6
per il mio progetto. Ho un modello come nel seguente diagramma:Ricerca per entità correlata
E devo interrogare il prodotto soggetto a partire da un insieme di oggetti Tag
. Si noti che l'oggetto Tag
è una classe astratta che viene effettivamente mappata utilizzando l'ereditarietà della strategia Table-Per-Entity
.
questa è la firma del mio metodo funzione
public IEnumerable<Product> SerachByTag(IEnumerable<Tag> tagList);
Nel parametro taglist in realtà ci saranno casi concreti di Tag
attuazione.
Come posso fare questa richiesta?
Ad esempio posso ricevere in ingresso la seguente struttura dati
[
{ tagType: 1, stringProperty: "abc" },
{ tagType: 2, intProperty: 9 }
]
e così via. Quale sarebbe il modo migliore per filtrare i prodotti? Per esempio potrei certamente prima applico un elenco di prodotti per ogni singolo criterio e quindi si intersecano questi risultati come nel seguente esempio:
var p1 = ctx.Tags
.OfType<FirstTagType>()
.Where(x => x.StringProperty.Equals("abc"))
.Select(x => x.Products);
var p2 = ctx.Tags
.OfType<SecondTagType>()
.Where(x => x.IntProperty == 9)
.Select(x => x.Products);
var results = p1.Intersect(p2);
Ma la mia domanda in questo caso è sulle prestazioni. Come si comporta questa query con molti filtri?
Se si sta solo eseguendo la query per il prodotto (e non si cura del tipo concreto di tag), si interroga semplicemente il tag (abstract) Tag dbset. –
@AlexKrupka: Grazie per la risposta. Purtroppo ho bisogno di prendere in considerazione il tipo concreto – Lorenzo