Risalve a tutti!
eccomi ancora qui a sfrugugliare linq x capire
dunque... dato il solito db Northwind, creo una listview x i prodotti dove al posto del categoryID voglio la descrizione della categoria:
<td><%# Eval("Category.CategoryName")%></td>
ovviamente nel profiler mi trovo tante chiamate alla tabella <Category> quanti sono i differenti categoryID nella pagina del listview mostrata dalla select sulla tabella <Products>
allora seguendo i vari esempi sull'ottimizzazione del lazyload, il prefetch ...bla...bla... inserisco
protected void LinqDataSource1_ContextCreated(object sender,
LinqDataSourceStatusEventArgs e)
{
DataLoadOptions ds = new DataLoadOptions();
ds.LoadWith<Category>(c => c.CategoryName);
(e.Result as NorthwindDataContext).LoadOptions = ds;
}
... ricontrollo e .... ritrovo le stesse chiamate?! ... ma com'è ma come non è... dopo un po' inserisco nella dichiarazione del linqdatasource la clausola
Select="new (ProductName,Category.CategoryName)"
e modifico il binding
<td><%# Eval("CategoryName")%></td>] ...et voilà le chiamate alla lookup spariscono e nell'unica chiamata trovo il join ...dunque tutto funziona come previsto ... ma siccome sono cornuto faccio la contrprova, ovvero commento la chiamata al metodo <LoadOptions> sul codebehind ma lascio la clausola <select>
dunque mi aspetto di ritrovare le stesse chiamate alla lookup e invece... nada!
il join è stato mantenuto e l'unica cosa che è rimasta rispetto alla versione senza prefetch è la clausola <select>...
che cosa non ho capito? la la chiamata al metodo <LoadOptions> serve o no?
chiedo lumi