private string GetPropertyAlias(Core.Domain.Filters.Filter filter, Dictionary <string, string> aliases, string rootAlias, ref int i, Action <string, string> action) { var pathNodes = new List <string>(filter.PropertyPath.Split('.')); var aliasName = rootAlias; var currentPath = aliasName; while (pathNodes.Count > 1) { var prop = pathNodes.First(); currentPath += "." + prop; if (!aliases.Keys.Contains(currentPath)) { action(aliasName + "." + prop, aliasName = "a" + i++); aliases.Add(currentPath, aliasName); } else { aliasName = aliases[currentPath]; } pathNodes.RemoveAt(0); } var propName = pathNodes[0]; return(aliasName + "." + propName); }
private AbstractCriterion GetExpression(Core.Domain.Filters.Filter filter, string propName) { switch (filter.Function) { case FilterFunc.Eq: if (filter.Values.Length > 1) { var expression = Restrictions.Or(Restrictions.Eq(propName, filter.Values[0]), Restrictions.Eq(propName, filter.Values[1])); for (var j = 2; j < filter.Values.Length; j++) { expression = Restrictions.Or(expression, Restrictions.Eq(propName, filter.Values[j])); } return(expression); } return(Restrictions.Eq(propName, filter.Values.First())); case FilterFunc.Le: return(Restrictions.Le(propName, filter.Values.First())); case FilterFunc.Lt: return(Restrictions.Lt(propName, filter.Values.First())); case FilterFunc.Ge: return(Restrictions.Ge(propName, filter.Values.First())); case FilterFunc.Gt: return(Restrictions.Gt(propName, filter.Values.First())); case FilterFunc.In: return(Restrictions.In(propName, filter.Values)); case FilterFunc.Between: return(Restrictions.Between(propName, filter.Values[0], filter.Values[1])); case FilterFunc.Like: if (filter.FilterType != FilterType.String) { break; } if (filter.Values.Length > 1) { var expression = Restrictions.Or(Restrictions.Like(propName, (string)filter.Values[0], MatchMode.Anywhere), Restrictions.Like(propName, (string)filter.Values[1], MatchMode.Anywhere)); for (var j = 2; j < filter.Values.Length; j++) { expression = Restrictions.Or(expression, Restrictions.Like(propName, (string)filter.Values[j], MatchMode.Anywhere)); } return(expression); } return(Restrictions.Like(propName, (string)filter.Values.First(), MatchMode.Anywhere)); case FilterFunc.InsensitiveLike: if (filter.FilterType != FilterType.String) { break; } if (filter.Values.Length > 1) { var expression = Restrictions.Or( Restrictions.InsensitiveLike(propName, (string)filter.Values[0], MatchMode.Anywhere), Restrictions.InsensitiveLike(propName, (string)filter.Values[1], MatchMode.Anywhere)); for (var j = 2; j < filter.Values.Length; j++) { expression = Restrictions.Or(expression, Restrictions.InsensitiveLike(propName, (string)filter.Values[j], MatchMode.Anywhere)); } return(expression); } return(Restrictions.InsensitiveLike(propName, (string)filter.Values.First(), MatchMode.Anywhere)); case FilterFunc.Nullable: return(Restrictions.IsNull(propName)); case FilterFunc.Id: if (filter.Values.Length > 1) { var expression = Restrictions.Or(Restrictions.Eq(propName, long.Parse(filter.Values[0].ToString())), Restrictions.Eq(propName, long.Parse(filter.Values[1].ToString()))); for (var j = 2; j < filter.Values.Length; j++) { expression = Restrictions.Or(expression, Restrictions.Eq(propName, long.Parse(filter.Values[j].ToString()))); } return(expression); } return(Restrictions.Eq(propName, long.Parse(filter.Values.First().ToString()))); default: throw new ArgumentOutOfRangeException(); } return(null); }