Esempio n. 1
0
        private IQueryable <Fotografia> creaQueryEntita(ParamCercaFoto param)
        {
            var qq = this.objectContext.Fotografie.Include("fotografo");

            if (!param.evitareJoinEvento)
            {
                qq = qq.Include("evento");
            }

            var qq2 = qq;

            IQueryable <Fotografia> query = qq2.AsQueryable();

            // ----- Filtro eventi
            // Siccome non esiste la WhereIn, me la sono creata io.
            // Seguire questa discussione : http://social.msdn.microsoft.com/Forums/en-US/adodotnetentityframework/thread/095745fe-dcf0-4142-b684-b7e4a1ab59f0
            if (param.eventi != null)
            {
                // Siccome ancora linq non supporta confronto con entità, devo estrarre gli id
                IEnumerable <Guid> listaIds = from le in param.eventi select le.id;
                query = query.Where(ff => listaIds.Contains(ff.evento.id));
            }


            // ----- Filtro scarico card
            if (param.scarichiCard != null)
            {
                IEnumerable <DateTime> listaDate = from le in param.scarichiCard select le.tempo;
                query = query.Where(ff => listaDate.Contains(ff.dataOraAcquisizione));
            }

            // ----- 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.Contains(ff.fotografo.id));
            }

            if (param.idsFotografie != null)
            {
                query = query.Where(ff => param.idsFotografie.Contains(ff.id));
            }

            if (param.numeriFotogrammi != null)
            {
                int[] range = FotoRangeUtil.rangeToString(param.numeriFotogrammi);

                // Testo se ho un range o una lista
                if (param.numeriFotogrammi.Contains('-'))
                {
                    int estInf = range[0];
                    int estSup = range[1];

                    // ----- RANGE di fotogramma
                    query = query.Where(ff => ff.numero >= estInf);
                    if (range[1] > 0)
                    {
                        query = query.Where(ff => ff.numero <= estSup);
                    }
                }
                else
                {
                    // ----- numeri di fotogramma
                    query = query.Where(ff => range.Contains(ff.numero));
                }
            }

            // ----- 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.Contains((short)ff.faseDelGiorno));
            }

            // ----- Didascalia (le didascalie le memorizziamo solo in maiuscolo)
            if (!String.IsNullOrWhiteSpace(param.didascalia) && param.didascalia != "%")
            {
                if (param.didascalia.Contains("%"))
                {
                    string dida;

                    if (param.didascalia.StartsWith("%") && param.didascalia.EndsWith("%"))
                    {
                        // Cerco nel mezzo
                        dida  = param.didascalia.Substring(1, param.didascalia.Length - 2);
                        query = query.Where(ff => ff.didascalia.Contains(dida));
                    }
                    else
                    {
                        if (param.didascalia.StartsWith("%"))
                        {
                            dida  = param.didascalia.Substring(1);
                            query = query.Where(ff => ff.didascalia.EndsWith(dida));
                        }
                        else if (param.didascalia.EndsWith("%"))
                        {
                            dida  = param.didascalia.Substring(0, param.didascalia.Length - 1);
                            query = query.Where(ff => ff.didascalia.StartsWith(dida));
                        }
                    }
                }
                else
                {
                    query = query.Where(ff => ff.didascalia.Equals(param.didascalia));
                }
            }

            // ----- 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);
            }

            // ----- Ordinamento
            if (param.ordinamento != null)
            {
                if (param.ordinamento == Ordinamento.Asc)
                {
                    query = query.OrderBy(ff => ff.dataOraAcquisizione).ThenBy(ff => ff.numero);
                }
                if (param.ordinamento == Ordinamento.Desc)
                {
                    query = query.OrderByDescending(ff => ff.dataOraAcquisizione).ThenByDescending(ff => ff.numero);
                }
            }

            return(query);
        }
Esempio n. 2
0
        internal static string creaQuerySQLWhere(ParamCercaFoto param, ref List <Object> paramOut)
        {
            StringBuilder sql = new StringBuilder();

            sql.Append(" where 1=1");
            sql.Append(SEPAR);

            #region Where - Eventi

            // Eventi
            if (param.eventi != null)
            {
                if (param.eventi.Length == 1)
                {
                    sql.Append("AND f.evento_id = {" + paramOut.Count + "}");
                    paramOut.Add((string)param.eventi.ElementAt(0).id.ToString());                          // Forzatura: devo convertirlo in stringa
                }
                else
                {
                    sql.Append("AND f.evento_id in ( ");
                    foreach (var p in param.eventi)
                    {
                        sql.Append("{" + paramOut.Count + "},");
                        paramOut.Add((string)p.ToString());                          // Forzatura: devo convertirlo in stringa
                    }
                    sql.Replace(',', ')', sql.Length - 1, 1);                        // Rimuovo l'ultima virgola di troppo e la sostituisco con la parentesi chiusa
                }
                sql.Append(SEPAR);
            }

            #endregion Where - Eventi


            #region Where - ScaricoCard

            // ----- Filtro scarico card
            if (param.scarichiCard != null)
            {
                IEnumerable <DateTime> listaDate = from le in param.scarichiCard select le.tempo;
                if (listaDate.Count() == 1)
                {
                    sql.Append("AND f.dataOraAcquisizione = {" + paramOut.Count + "}");
                    paramOut.Add(listaDate.ElementAt(0));
                }
                else
                {
                    sql.Append("AND dataOraAcquisizione in ( ");
                    foreach (var d in listaDate)
                    {
                        sql.Append("{" + paramOut.Count + "},");
                        paramOut.Add(d);
                    }
                    sql.Replace(',', ')', sql.Length - 1, 1);                        // Rimuovo l'ultima virgola di troppo e la sostituisco con la parentesi chiusa
                }
                sql.Append(SEPAR);
            }

            #endregion Where - ScaricoCard

            #region Where - Fotografo

            // ----- Filtro fotografo
            if (param.fotografi != null)
            {
                if (param.fotografi.Length == 1)
                {
                    sql.Append("AND f.fotografo_id = {" + paramOut.Count + "}");
                    paramOut.Add(param.fotografi.ElementAt(0).id);
                }
                else
                {
                    sql.Append("AND f.fotografo_id in ( ");
                    foreach (var oo in param.fotografi)
                    {
                        sql.Append("{" + paramOut.Count + "},");
                        paramOut.Add(oo.id);
                    }
                    sql.Replace(',', ')', sql.Length - 1, 1);                        // Rimuovo l'ultima virgola di troppo e la sostituisco con la parentesi chiusa
                }
                sql.Append(SEPAR);
            }

            #endregion Where - Fotografo

            #region Where - ids Foto

            // --- id delle fotografie
            if (param.idsFotografie != null)
            {
                sql.Append("AND f.id in ( ");
                foreach (var id in param.idsFotografie)
                {
                    sql.Append("{" + paramOut.Count + "},");
                    paramOut.Add((string)id.ToString());
                }
                sql.Replace(',', ')', sql.Length - 1, 1);                    // Rimuovo l'ultima virgola di troppo e la sostituisco con la parentesi chiusa
                sql.Append(SEPAR);
            }

            #endregion Where - ids Foto

            #region Where - numerifotogrammi

            // --- numeri di fotogrammi
            if (param.numeriFotogrammi != null)
            {
                int [] range = FotoRangeUtil.rangeToString(param.numeriFotogrammi);

                // Testo se ho un range o una lista
                if (param.numeriFotogrammi.Contains('-'))
                {
                    int estInf = range [0];
                    int estSup = range [1];

                    // ----- RANGE di fotogramma
                    sql.Append("AND f.numero >= {" + paramOut.Count + "}");
                    sql.Append(SEPAR);
                    paramOut.Add(estInf);

                    if (range [1] > 0)
                    {
                        sql.Append("AND f.numero <= {" + paramOut.Count + "}");
                        paramOut.Add(estSup);
                        sql.Append(SEPAR);
                    }
                }
                else
                {
                    // ----- numeri di fotogramma
                    sql.Append("AND f.numero in ( ");
                    foreach (var nn in range)
                    {
                        sql.Append("{" + paramOut.Count + "},");
                        paramOut.Add(nn);
                    }
                    sql.Replace(',', ')', sql.Length - 1, 1);                        // Rimuovo l'ultima virgola di troppo e la sostituisco con la parentesi chiusa
                    sql.Append(SEPAR);
                }
            }

            #endregion Where - numerifotogrammi

            #region Where - Fasi del giorno

            // ----- 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);

                sql.Append("AND f.faseDelGiorno in ( ");
                foreach (var nn in fasiInt)
                {
                    sql.Append("{" + paramOut.Count + "},");
                    paramOut.Add(nn);
                }
                sql.Replace(',', ')', sql.Length - 1, 1);                    // Rimuovo l'ultima virgola di troppo e la sostituisco con la parentesi chiusa
                sql.Append(SEPAR);
            }

            #endregion Where - Fasi del giorno


            #region Where - Didascalia

            // ----- Didascalia (le didascalie le memorizziamo solo in maiuscolo)
            if (!String.IsNullOrWhiteSpace(param.didascalia) && param.didascalia != "%")
            {
                if ("(VUOTA)".Equals(param.didascalia, StringComparison.CurrentCultureIgnoreCase))
                {
                    // Caso particolare : voglio solo i nulli.
                    sql.Append("AND f.didascalia is null ");
                }
                else if ("(PIENA)".Equals(param.didascalia, StringComparison.CurrentCultureIgnoreCase))
                {
                    // Caso particolare : voglio solo i NON nulli.
                    sql.Append("AND f.didascalia is not null ");
                }
                else
                {
                    sql.Append("AND f.didascalia like ");
                    sql.Append("{" + paramOut.Count + "}");
                    paramOut.Add(param.didascalia);
                    sql.Append(SEPAR);
                }
            }

            #endregion Where - Didascalia

            #region Date

            // ----- Giornata Inizio
            if (param.giornataIniz != null)
            {
                sql.Append("AND f.giornata >= ");
                sql.Append("{" + paramOut.Count + "}");
                paramOut.Add(param.giornataIniz);
                sql.Append(SEPAR);
            }

            // ----- Giornata Fine
            if (param.giornataFine != null)
            {
                sql.Append("AND f.giornata <= ");
                sql.Append("{" + paramOut.Count + "}");
                paramOut.Add(param.giornataFine);
                sql.Append(SEPAR);
            }

            #endregion Date

            #region vendute/non vendute
            if (param.soloVendute != null && param.soloVendute == true)
            {
                sql.Append("AND (f.contaStampata > 0 or f.contaMasterizzata > 0)");
                sql.Append(SEPAR);
            }
            if (param.soloVendute != null && param.soloVendute == false)
            {
                sql.Append("AND (f.contaStampata = 0 and f.contaMasterizzata = 0)");
                sql.Append(SEPAR);
            }
            #endregion vendute/non vendute


            // TODO ..... altri parametri mancanti

            sql.Append(" ");

            return(sql.ToString());
        }