Example #1
0
        private string TranslateIClause(IClause clause, DbCommand oCmd, ref int k)
        {
            String cmdText = "";

            if (clause is SingleClause)
            {
                SingleClause sc = clause as SingleClause;

                if (sc.Operator == CriteriaOperator.IsNull || sc.Operator == CriteriaOperator.IsNotNull)
                {
                    cmdText += String.Format("({0} {1})", sc.PropertyName, DaoSQLServerDBHelper.TranslateOperator(sc.Operator));
                }
                else
                {
                    string par = String.Format("p{0}", k++);
                    cmdText += String.Format("({0} {1} :{2})", sc.PropertyName, DaoSQLServerDBHelper.TranslateOperator(sc.Operator), par);
                    try
                    {
                        ObjectParameter p = new ObjectParameter(par, ((SingleClause)clause).Value.ToString());
                        //oCmd.Parameters.Add(par, ((SingleClause)clause).Value.ToString());
                    }
                    catch
                    {
                    }
                }
            }
            else if (clause is CombinedClause)
            {
                cmdText += "(";
                CombinedClause cc = clause as CombinedClause;
                for (int j = 0; j < cc.SubClauses.Count() - 1; j++)
                {
                    cmdText += String.Format("{0} {1} ", TranslateIClause(cc.SubClauses.ElementAt(j), oCmd, ref k),
                                             cc.ClauseType.ToString().ToUpper());
                }
                cmdText += String.Format("{0})", TranslateIClause(cc.SubClauses.Last(), oCmd, ref k));
            }
            return(cmdText);
        }
Example #2
0
        private QueryCmp BuildQueryByData(ContactsApplicationMapping contact)
        {
            QueryCmp q = new QueryCmp();
            //prendo tutte le properties mappate su database
            IEnumerable <PropertyInfo> pi = contact.GetType()
                                            .GetProperties(BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public)
                                            .Where(x => (x.GetCustomAttributes(typeof(DatabaseFieldAttribute), true) != null &&
                                                         x.GetCustomAttributes(typeof(DatabaseFieldAttribute), true).Length > 0));

            if (pi.All(x =>
            {
                Type pt = x.PropertyType;
                if (pt.IsValueType)
                {
                    return(x.GetValue(contact, null).Equals(Activator.CreateInstance(pt)));
                }
                else
                {
                    return(x.GetValue(contact, null) == null);
                }
            }))
            {
                return(q);
            }

            var validProps = pi.Where(x =>
            {
                Type pt = x.PropertyType;
                if (pt.IsValueType)
                {
                    return(!x.GetValue(contact, null).Equals(Activator.CreateInstance(pt)));
                }
                else
                {
                    return(x.GetValue(contact, null) != null);
                }
            });

            CombinedClause cc = new CombinedClause();

            q.WhereClause = cc;
            List <IClause> lc = new List <IClause>();

            cc.SubClauses = lc;

            if (validProps.Count() == 1)
            {
                cc.ClauseType = QueryOperator.Or;
                lc.Add(BuildSingleClause(contact, validProps.Single()));
                lc.Add(BuildNullClause(validProps.Single()));
            }
            else
            {
                cc.ClauseType = QueryOperator.And;
                foreach (var p in validProps)
                {
                    CombinedClause cc0 = new CombinedClause();
                    cc0.ClauseType = QueryOperator.Or;
                    List <IClause> lc0 = new List <IClause>();
                    cc0.SubClauses = lc0;
                    lc0.Add(BuildSingleClause(contact, p));
                    lc0.Add(BuildNullClause(p));
                    lc.Add(cc0);
                }
            }

            return(q);
        }