Esempio n. 1
0
        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());
        }
Esempio n. 2
0
        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);
        }