internal static Dictionary <string, object> GetSearchExpreesionValues(ISearchExpression se)
        {
            Dictionary <string, object> ret = new Dictionary <string, object>();

            Feng.Search.LogicalExpression le = se as Feng.Search.LogicalExpression;
            if (le != null)
            {
                Dictionary <string, object> r = GetSearchExpreesionValues(le.LeftHandSide);
                foreach (KeyValuePair <string, object> kvp in r)
                {
                    ret[kvp.Key] = kvp.Value;
                }
                r = GetSearchExpreesionValues(le.RightHandSide);
                foreach (KeyValuePair <string, object> kvp in r)
                {
                    ret[kvp.Key] = kvp.Value;
                }
            }
            else
            {
                Feng.Search.SimpleExpression ce = se as Feng.Search.SimpleExpression;
                ret[ce.FullPropertyName + ce.Operator.ToString()] = ce.Values;
            }
            return(ret);
        }
Exemplo n.º 2
0
 private ISearchExpression RemoveParentSelectAsExpression(ISearchExpression exp)
 {
     if (m_parentSm.SelectAsColumns == null)
     /* || m_innerSearchManager.Count == 0) */    // 不知道为什么有这句话
     {
         return(exp);
     }
     Feng.Search.LogicalExpression le = exp as Feng.Search.LogicalExpression;
     if (le != null)
     {
         ISearchExpression sel = RemoveParentSelectAsExpression(le.LeftHandSide);
         ISearchExpression ser = RemoveParentSelectAsExpression(le.RightHandSide);
         return(new Feng.Search.LogicalExpression(sel, ser, le.LogicOperator));
     }
     else
     {
         Feng.Search.SimpleExpression se = exp as Feng.Search.SimpleExpression;
         if (se != null)
         {
             if (m_parentSm.SelectAsColumns.ContainsKey(se.FullPropertyName))
             {
                 return(SearchExpression.True());
             }
             else
             {
                 return(se);
             }
         }
     }
     return(null);
 }
        internal static ISearchExpression ReplaceSearchExpreesionValues(ISearchExpression se, Dictionary <string, object> dict)
        {
            Feng.Search.LogicalExpression le = se as Feng.Search.LogicalExpression;
            if (le != null)
            {
                ISearchExpression l = le.LeftHandSide;
                l = ReplaceSearchExpreesionValues(l, dict);

                ISearchExpression r = le.RightHandSide;
                r = ReplaceSearchExpreesionValues(r, dict);

                if (l == null)
                {
                    return(r);
                }
                else if (r == null)
                {
                    return(l);
                }
                else
                {
                    return(new Feng.Search.LogicalExpression(l, r, le.LogicOperator));
                }
            }
            else
            {
                Feng.Search.SimpleExpression ce = se as Feng.Search.SimpleExpression;
                string s = ce.Values.ToString();
                if (s[0] == '%' && s[s.Length - 1] == '%')
                {
                    string s1 = s.Substring(1, s.Length - 2);
                    if (dict.ContainsKey(s1))
                    {
                        ce.Values = dict[s1];
                    }
                    else
                    {
                        ce = null;
                    }
                }
                return(ce);
            }
        }