Example #1
0
        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);
        }
Example #2
0
        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);
        }