ciao,
pierpaolo1982 ha scritto:
in oltre, secondo voi è congliabile utilizzare LINQ con grosse tabelle?
Sì, purché tu tenga d'occhio la query SQL che il provider sta generando.
Se usi il DbContext, ti basta fare un .ToString sulla query LINQ per capire quale SELECT verrà inviata al db.
Nel tuo caso, hai creato una query LINQ molto convoluta, che probabilmente si tradurrà in una SELECT con molte
subqueries. Sono loro la causa della lentezza: il server deve prima calcolarsi una tabella di risultati, metterla da una parte e poi proseguire unendola ad altre tabelle di risultati.
from csjoined in csj.DefaultIfEmpty()
Capisco che tu abbia voluto simulare una LEFT OUTER JOIN ma con LINQ To Entities non è necessario farlo perché puoi già accedere alle entità correlate Books e ComingSoon dalle proprietà di navigazione di BooksWishlistContents.
Ecco un articolo che ti spiega il problema:
Don't use LINQ join's. Navigate!La tua query probabilmente potrebbe essere riscritta in maniera più semplice, ammesso che le relazioni tra le entità BooksWishlistContents, Books e ComingSoon siano state mappate correttamente (cioè esiste un vincolo di foreign key).
Vedrai che la query SQL generata sarà molto più pulita (controllalo di nuovo invocando il ToString) e quindi le prestazioni miglioreranno.
ciao,
Moreno