Ejemplo n.º 1
0
        // moteda sprawdzajaca czy w podanym searchQuery ma zasosowanie filtr, jesli tak to podaje ktorego pola i wartosci filtr dotyczy
        public bool CheckStringForBeingApplied(string searchQuery, out string fieldName, out string value)
        {
            fieldName = "";
            value     = "";
            if (!(searchQuery.Length > 0))
            {
                return(false);
            }

            string[] words = searchQuery.Trim().Split(new char[] { ' ' });

            foreach (string s in words)
            {
                if (s.Trim().ToUpper().StartsWith(SearchKey.ToUpper() + Delimiter))
                {
                    foreach (var prop in (typeof(T)).GetProperties())
                    {
                        if (prop.Name == FieldName)
                        {
                            value     = s.Trim().Remove(0, (SearchKey + Delimiter).Length);
                            fieldName = FieldName;
                            return(true);
                        }
                    }
                }
            }

            return(false);
        }
Ejemplo n.º 2
0
        public override void ExecuteFilter(ref IQueryable <T> query, ref string searchQuery)
        {
            string Field = "";

            //string Value = "";
            if (CheckStringForBeingApplied(searchQuery, out Field, out SearchValue))
            {
                ParameterExpression          parameter    = Expression.Parameter(typeof(T), "x");
                Expression                   property     = Expression.Property(parameter, Field);
                Expression                   target       = Expression.Constant(SearchValue /*.ToUpper()*/, typeof(string));
                MethodInfo                   mi           = typeof(string).GetMethod("Contains", new Type[] { typeof(string) });
                Expression                   equalsMethod = Expression.Call(property, mi, target);
                Expression <Func <T, bool> > lambda       = Expression.Lambda <Func <T, bool> >(equalsMethod, parameter);
                query    = query.Where(lambda);
                Executed = true;

                int iStart = searchQuery.ToUpper().IndexOf(SearchKey.ToUpper() + Delimiter + SearchValue.ToUpper());
                int iLen   = (SearchKey + Delimiter + SearchValue).Length;
                searchQuery = searchQuery.Remove(iStart, iLen).Trim();
            }
        }