Bonjour
J’ai repris un programme (c# et Entity Framework) avec des tres gros lenteur de requetes apres avoir examniner avec sql profiler, conclusion il y’ a trop de include dans le programme, qui se charge en mémoire
ont m’a dit de faire une projection exemple du type var q = from r in v_…….
select … { Lebelle = r.Libelle, },
la question est comment l'appliquer J’ai pas su faire pouvez vous m’aider

Voici le code :


public static List<InterventionRealisee> GetInterventionByFiltre(RechercheDossierFiltre p_filtre, Boolean p_affichageDetaille)
{

p_filtre.DateDebut = p_filtre.DateDebut.Date;
p_filtre.DateFin = p_filtre.DateFin.Date.AddDays(1);

DataAccessSmartBlocContainer v_context = new DataAccessSmartBlocContainer(SingletonContext.GetInstance().Context.Connection.ConnectionString);
//TODO ne pas garder

//String v_connexionString = String.Format(ConfigurationSettings.AppSettings["FormattedConnectionString"], "stuardi");

////DataAccessSmartBlocContainer v_context = new DataAccessSmartBlocContainer(v_connexionString);

// FIN TODO

//Les Include demandent de la ressource pour populer les objets InterventionRealisee
//On les utilise donc que si nécessaire


//Include systématiquement utilisés pour l'affichage


ObjectQuery<InterventionRealisee> v_query = v_context.InterventionRealiseeJeu;


.Include("FKSalle")
.Include("FKChecklist")
.Include("FKChirurgie")
.Include("FKChirurgie.LSTOperateur")
.Include("FKChirurgie.LSTOperateur.FKActeRealise")
.Include("FKChirurgie.LSTOperateur.FKPersonnel")
;




var q = from r in v_context.SalleJeu
select Libelle
{
Id = r.Id,
Status = r.Status
}


if (p_affichageDetaille)
{
v_query = v_query.Include("FKDiscipline");
v_query = vquery.Include("FKRegulation");
v_query = v_query.Include("FKRegulation.FKChirurgien");
v_query = v_query.Include("FKRegulation.FKTypeInterventionProgrammee");
v_query = v_query.Include("FKRegulation.FKAnesthesiste");
v_query = v_query.Include("FKEnqueteInciso");
v_query = v_query.Include("FKAnesthesie.FKAnesthesiste1");
v_query = v_query.Include("FKAnesthesie.FKAnesthesiste2");
}
else
{
if (p_filtre.Anesthesiste.HasValue)
{
v_query = v_query.Include("FKAnesthesie");
}

if (!string.IsNullOrEmpty(p_filtre.Chirurgien))
{
v_query = v_query.Include("FKRegulation").Include("FKRegulation.FKChirurgien");
}
}


IEnumerable<InterventionRealisee> v_resultat = v_query.Where(PredicatFiltre(p_filtre));

//On ne peut pas appliquer tous les critères avec PredicatFiltre
//On fait le reste ici

//CRITERE SUR LES PLATEAUX
if (p_filtre.Plateaux.Count > 0)
{
v_resultat = v_resultat.Where(ir => p_filtre.Plateaux.Contains(ir.FKBlocReference.EntityKey.EntityKeyValues[0].Value.ToString()));
}

//CRITERE SUR LE TYPE D'INTERVENTION
if (!string.IsNullOrEmpty(p_filtre.TypeIntervention))
{
v_resultat = v_resultat.Where(ir => ir.FKChirurgie == null ? false : ir.FKChirurgie.LSTOperateur.Where(o => !o.IsDeleted).Select(o => (int)o.FKActeRealiseReference.EntityKey.EntityKeyValues[0].Value).Contains(int.Parse(p_filtre.TypeIntervention)));
}


//CRITERE SUR LE CHIRURGIEN
if (!string.IsNullOrEmpty(p_filtre.Chirurgien))
{


// v_resultat = v_resultat;
v_resultat = v_resultat.Where(ir =>
(ir.FKChirurgie != null && ir.FKChirurgie.LSTOperateur.Count(o => !o.IsDeleted) > 0 && ir.FKChirurgie.LSTOperateur.Where(o => !o.IsDeleted).Select(o => o.FKPersonnel.Id).Contains(int.Parse(p_filtre.Chirurgien)))
||
(ir.FKRegulation != null && ir.FKRegulation.FKChirurgien != null && ir.FKRegulation.FKChirurgien.Id == int.Parse(p_filtre.Chirurgien))
);
}

//SingletonContext.GetInstance().Context.Refresh(System.Data.Objects.RefreshMode.StoreWins, v_resultat);

List<InterventionRealisee> v_resultatListe = v_resultat.ToList();
v_context.Dispose();


return v_resultatListe