/* * Для числовых полей доступны следующие условия: * [] - null * [!] - не null * [>] - больше * [<] - меньше * [!=] - не равно * [>=] - больше или равно * [<=] - меньше или равно * [in] - принадлежит множеству * [!in]- не принадлежит множеству */ public IList <T> GetByCriteria(Dictionary <string, object> queryParams, Dictionary <string, object> orderParams = null) { string alias; IList aliases = new List <string>(); NHibernate.ICriteria criteria = Session.CreateCriteria(typeof(T)); foreach (KeyValuePair <string, object> kvp in queryParams) { string kvpKey = kvp.Key; string param = null; if (kvpKey.StartsWith("[")) { param = kvpKey.Substring(0, kvpKey.IndexOf("]") + 1); //Убираем спец. символы if ((param == "[!]") || (param == "[]") || (param == "[!=]") || (param == "[>]") || (param == "[<]") || (param == "[>=]") || (param == "[<=]") || (param == "[in]") || (param == "[!in]")) { kvpKey = kvpKey.Substring(kvpKey.IndexOf("]") + 1); } } if (kvpKey.Contains(".")) { alias = kvpKey.Substring(0, kvpKey.IndexOf(".")); if (!aliases.Contains(alias)) { aliases.Add(alias); criteria.CreateAlias(alias, alias); } } if (param == null) { criteria.Add(Restrictions.Eq(kvpKey, kvp.Value)); } else { if (param == "[]") { criteria.Add(Restrictions.IsNull(kvpKey)); } else if (param == "[!]") { criteria.Add(Restrictions.Not(Restrictions.IsNull(kvpKey))); } else if (param == "[!=]") { criteria.Add(Restrictions.Not(Restrictions.Eq(kvpKey, kvp.Value))); } else if (param == "[>]") { criteria.Add(Restrictions.Gt(kvpKey, kvp.Value)); } else if (param == "[in]") { ICollection collection; String val = (string)kvp.Value; if (val.Contains("'")) { collection = GetStringCollection((string)kvp.Value); } else { collection = GetIntCollection((string)kvp.Value); } criteria.Add(Restrictions.In(kvpKey, collection)); } else if (param == "[!in]") { ICollection collection; String val = (string)kvp.Value; if (val.Contains("'")) { collection = GetStringCollection((string)kvp.Value); } else { collection = GetIntCollection((string)kvp.Value); } criteria.Add(Restrictions.Not(Restrictions.In(kvpKey, collection))); } else if (param == "[<]") { criteria.Add(Restrictions.Lt(kvpKey, kvp.Value)); } else if (param == "[>=]") { criteria.Add(Restrictions.Ge(kvpKey, kvp.Value)); } else if (param == "[<=]") { criteria.Add(Restrictions.Le(kvpKey, kvp.Value)); } else { criteria.Add(Restrictions.Eq(kvpKey, kvp.Value)); } } } if (orderParams != null) { foreach (KeyValuePair <string, object> ovp in orderParams) { if (ovp.Key.Contains(".")) { alias = ovp.Key.Substring(0, ovp.Key.IndexOf(".")); if (!aliases.Contains(alias)) { aliases.Add(alias); criteria.CreateAlias(alias, alias); } } criteria.AddOrder(new Order(ovp.Key, (bool)ovp.Value)); } } return(criteria.List <T>()); }