Пример #1
0
        public ICollection <ContactsApplicationMapping> GetContactsByCriteria(QueryCmp query)
        {
            List <ContactsApplicationMapping> listContacts = null;

            using (OracleCommand oCmd = base.CurrentConnection.CreateCommand())
            {
                oCmd.CommandText = cmdSelectRoot + TranslateQuery(query, oCmd);
                try
                {
                    using (OracleDataReader r = oCmd.ExecuteReader())
                    {
                        if (r.HasRows)
                        {
                            listContacts = new List <ContactsApplicationMapping>();
                            while (r.Read())
                            {
                                listContacts.Add((ContactsApplicationMapping)DataMapper.FillObject(r, typeof(ContactsApplicationMapping)));
                            }
                        }
                    }
                }
                catch
                {
                    //todo
                    throw;
                }
            }
            return(listContacts);
        }
Пример #2
0
        private string TranslateQuery(QueryCmp q, OracleCommand oCmd)
        {
            string cmdText = String.Empty;

            if (q.WhereClause != null)
            {
                cmdText += " WHERE";
                int k = 0;
                cmdText += TranslateIClause(q.WhereClause, oCmd, ref k);
            }

            return(cmdText);
        }
Пример #3
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);
        }