public ICollection <Carrello> cerca(ParamCercaCarrello param) { _giornale.Debug("Parametri di ricerca:\n" + param); IQueryable <Carrello> query = creaQueryEntita(param); // Devo usare prima tutto se no dopo non me lo ricollega più!!! Perchè ho chiuso la connessione?!?!?!?!?!!? foreach (Carrello c in query.ToList()) { // Per caricare una collezione sarebbe più figo cosi: // UnitOfWorkScope.currentDbContext.Entry( c ).Collection( k => k.righeCarrello ).Load(); System.Diagnostics.Trace.WriteLine("\n\n*** Carrello = " + c.id + " " + c.giornata); foreach (RigaCarrello r in c.righeCarrello) { System.Diagnostics.Trace.WriteLine("\n\t" + r.GetType().Name + " " + r.id + " " + r.descrizione); System.Diagnostics.Trace.WriteLine("\t\tFotografo = " + r.fotografo); System.Diagnostics.Trace.WriteLine("\t\tFotografia = " + r.fotografia); if (r.fotografia != null) { System.Diagnostics.Trace.WriteLine("\t\tDataOra = " + r.fotografia.dataOraAcquisizione); } System.Diagnostics.Trace.WriteLine("\t\tProdotto = " + r.prodotto.descrizione); } } // Eventuale paginazione dei risultati if (param.paginazione != null) { query = query.Skip(param.paginazione.skip).Take(param.paginazione.take); } #if DEBUG // Eventuale debug della query if (_giornale.IsDebugEnabled) { _giornale.Debug(query.ToString()); } #endif _giornale.Debug("Eseguita query ricerca carrelli"); return(query.ToList()); }
private IQueryable <Carrello> creaQueryEntita(ParamCercaCarrello param) { IQueryable <Carrello> query = from ff in this.objectContext.Carrelli.Include("righeCarrello") orderby ff.tempo descending select ff; // ----- ID : ricerca puntuale per ID if (param.carrelloId != Guid.Empty) { query = query.Where(cc => cc.id == param.carrelloId); } if (param.carrelloIdCorto != null) { query = query.Where(cc => cc.idCortoSelfService == param.carrelloIdCorto); } //Filtro solo i carrelli che non sono stati venduti if (param.isVenduto != null) { if (param.isVenduto == false) { query = query.Where(ff => ff.venduto != true); } } // Filtro solo i carrelli visibili per il self service if (param.soloSelfService != null) { query = query.Where(cc => cc.visibileSelfService == param.soloSelfService); } // ----- Filtro fotografo if (param.fotografi != null) { // Siccome ancora linq non supporta confronto con entità, devo estrarre gli id var listaIds = from le in param.fotografi select le.id; query = query.Where(ff => listaIds.Equals(ff.righeCarrello.Where(r => r.discriminator == RigaCarrello.TIPORIGA_STAMPA).First <RigaCarrello>().fotografo)); } // ----- fasi del giorno (la Enum non prevede il Contains. Devo trasformarla in una array di interi if (param.fasiDelGiorno != null && param.fasiDelGiorno.Count > 0) { IEnumerable <short> fasiInt = from p in param.fasiDelGiorno select Convert.ToInt16(p); query = query.Where(ff => fasiInt.Equals(ff.righeCarrello.Where(r => r.discriminator == RigaCarrello.TIPORIGA_STAMPA).First <RigaCarrello>().fotografia.faseDelGiorno)); } // ----- Intestazione if (!String.IsNullOrWhiteSpace(param.intestazione)) { query = query.Where(ff => ff.intestazione.ToLower().Contains(param.intestazione.ToLower())); } // ----- Giornata Inizio if (param.giornataIniz != null) { query = query.Where(ff => ff.giornata >= param.giornataIniz); } // ----- Giornata Fine if (param.giornataFine != null) { query = query.Where(ff => ff.giornata <= param.giornataFine); } return(query); }