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