看过很多强类型查询的实现,觉得通过层层嵌套的方法来构造,感觉很不直观,昨天下午花了点时间写了个验证的代码,现在发上来大家看看这样子实现的查询方便不方便,有什么问题,因为是突发奇想,所以未经过严格验证,所以如果发现问题请温柔提出. 
  
这里只是个验证想法的代码,所以没有作任何容错和扩展性处理.也不要提出OO不OO的看法,毫无疑义.
我所设想的是一个查询 Select [Columnlist] From [TableName] Where [Exp] Order By [PK] 一般来说是这个格式,我们最难表述的其实就是[Exp]这个部分。前面的都比较格式化,所以可以通过嵌套方法来实现还是比较合适的,但是[Exp]这个部分用诸如AND(Exp1,Exp2)这样子的形式不能很直观的看出表达式的意义,所以通过重载操作符的方式来实现,这里我们假设在Entity的Class里有static成员来存储列的名称。那么
       
  
Exp Rs=new Exp(User.ID) == 2 & new Exp(User.State) > 0 ;
       
  
这样子的格式就能表达Where后面的 ID=2 AND State>0 这个表达式
  
具体代码如下
  
  
      
                
  
 这里只是个验证想法的代码,所以没有作任何容错和扩展性处理.也不要提出OO不OO的看法,毫无疑义.
我所设想的是一个查询 Select [Columnlist] From [TableName] Where [Exp] Order By [PK] 一般来说是这个格式,我们最难表述的其实就是[Exp]这个部分。前面的都比较格式化,所以可以通过嵌套方法来实现还是比较合适的,但是[Exp]这个部分用诸如AND(Exp1,Exp2)这样子的形式不能很直观的看出表达式的意义,所以通过重载操作符的方式来实现,这里我们假设在Entity的Class里有static成员来存储列的名称。那么
Exp Rs=new Exp(User.ID) == 2 & new Exp(User.State) > 0 ;
这样子的格式就能表达Where后面的 ID=2 AND State>0 这个表达式
具体代码如下
    
        1
    
     class
    
    
       Program
    
          
    
    
      class
    
    
       Program
      
2 {
      
          
    
    
    
      
        {
        
3 static
      
      
         
      
      
        void
      
      
         Main(
      
      
        string
      
      
        [] args)
                
      
      
        static
      
      
         
      
      
        void
      
      
         Main(
      
      
        string
      
      
        [] args)
        
4 {
        
                
      
      
      
        
          {
          
5 
          
6 Exp rs 
        
        
          =
        
        
           
        
        
          new
        
        
           Exp(
        
        
          "
        
        
          C1
        
        
          "
        
        
          ) 
        
        
          ==
        
        
           
        
        
          25
        
        
           
        
        
          &
        
        
           
        
        
          new
        
        
           Exp(
        
        
          "
        
        
          C2
        
        
          "
        
        
          ) 
        
        
          >
        
        
           
        
        
          3
        
        
           
        
        
          |
        
        
           
        
        
          new
        
        
           Exp(
        
        
          "
        
        
          C3
        
        
          "
        
        
          ) 
        
        
          <
        
        
           
        
        
          5
        
        
           
        
        
          ^
        
        
           
        
        
          new
        
        
           Exp(
        
        
          "
        
        
          C4
        
        
          "
        
        
          ) 
        
        
          %
        
        
           
        
        
          "
        
        
          hehe
        
        
          "
        
        
          ;
                      Exp rs 
        
        
          =
        
        
           
        
        
          new
        
        
           Exp(
        
        
          "
        
        
          C1
        
        
          "
        
        
          ) 
        
        
          ==
        
        
           
        
        
          25
        
        
           
        
        
          &
        
        
           
        
        
          new
        
        
           Exp(
        
        
          "
        
        
          C2
        
        
          "
        
        
          ) 
        
        
          >
        
        
           
        
        
          3
        
        
           
        
        
          |
        
        
           
        
        
          new
        
        
           Exp(
        
        
          "
        
        
          C3
        
        
          "
        
        
          ) 
        
        
          <
        
        
           
        
        
          5
        
        
           
        
        
          ^
        
        
           
        
        
          new
        
        
           Exp(
        
        
          "
        
        
          C4
        
        
          "
        
        
          ) 
        
        
          %
        
        
           
        
        
          "
        
        
          hehe
        
        
          "
        
        
          ;
          
7 Console.WriteLine(rs.Sql);
                      Console.WriteLine(rs.Sql);
          
8 foreach
        
        
           (SqlParameter sp 
        
        
          in
        
        
           rs.Sps)
                      
        
        
          foreach
        
        
           (SqlParameter sp 
        
        
          in
        
        
           rs.Sps)
          
9 {
          
                      
        
        
        
          
            {
            
10 Console.WriteLine(sp.ParameterName);
                            Console.WriteLine(sp.ParameterName);
            
11 }
                        }
          
        
        
          
12 Console.Read();
                      Console.Read();
          
13 }
                  }
        
      
      
        
14 }
            }
      
    
    
      
15 
      
16 class
    
    
       Exp
          
    
    
      class
    
    
       Exp
      
17 {
      
          
    
    
    
      
        {
        
18 private
      
      
         
      
      
        string
      
      
         _Sql;
                
      
      
        private
      
      
         
      
      
        string
      
      
         _Sql;
        
19 
        
20 private
      
      
         List
      
      
        <
      
      
        SqlParameter
      
      
        >
      
      
         sps;
                
      
      
        private
      
      
         List
      
      
        <
      
      
        SqlParameter
      
      
        >
      
      
         sps;
        
21 
        
22 public
      
      
         List
      
      
        <
      
      
        SqlParameter
      
      
        >
      
      
         Sps
                
      
      
        public
      
      
         List
      
      
        <
      
      
        SqlParameter
      
      
        >
      
      
         Sps
        
23 {
        
                
      
      
      
        
          {
          
24 get
        
        
           
        
        
        
          
            { 
          
          
            return
          
          
             sps; }
          
                      
        
        
          get
        
        
           
        
        
        
          
            { 
          
          
            return
          
          
             sps; }
          
        
        
          
25 set
        
        
           
        
        
        
          
            { sps 
          
          
            =
          
          
             value; }
          
                      
        
        
          set
        
        
           
        
        
        
          
            { sps 
          
          
            =
          
          
             value; }
          
        
        
          
26 }
                  }
        
      
      
        
27 
        
28 private
      
      
         SqlParameter sp;
                
      
      
        private
      
      
         SqlParameter sp;
        
29 
        
30 public
      
      
         
      
      
        string
      
      
         Sql
                
      
      
        public
      
      
         
      
      
        string
      
      
         Sql
        
31 {
        
                
      
      
      
        
          {
          
32 get
        
        
           
        
        
        
          
            { 
          
          
            return
          
          
             _Sql; }
          
                      
        
        
          get
        
        
           
        
        
        
          
            { 
          
          
            return
          
          
             _Sql; }
          
        
        
          
33 }
                  }
        
      
      
        
34 
        
35 private
      
      
         Exp()
                
      
      
        private
      
      
         Exp()
        
36 {
        
                
      
      
      
        
          {
          
37 sps 
        
        
          =
        
        
           
        
        
          new
        
        
           List
        
        
          <
        
        
          SqlParameter
        
        
          >
        
        
          ();
                      sps 
        
        
          =
        
        
           
        
        
          new
        
        
           List
        
        
          <
        
        
          SqlParameter
        
        
          >
        
        
          ();
          
38 }
                  }
        
      
      
        
39 
        
40 public
      
      
         Exp(
      
      
        string
      
      
         CollumnName)
                
      
      
        public
      
      
         Exp(
      
      
        string
      
      
         CollumnName)
        
41 {
        
                
      
      
      
        
          {
          
42 _Sql 
        
        
          =
        
        
           CollumnName;
                      _Sql 
        
        
          =
        
        
           CollumnName;
          
43 }
                  }
        
      
      
        
44 
        
45 public
      
      
         
      
      
        static
      
      
         Exp 
      
      
        operator
      
      
         
      
      
        ==
      
      
        (Exp Left, Object Value)
                
      
      
        public
      
      
         
      
      
        static
      
      
         Exp 
      
      
        operator
      
      
         
      
      
        ==
      
      
        (Exp Left, Object Value)
        
46 {
        
                
      
      
      
        
          {
          
47 Exp Next 
        
        
          =
        
        
           
        
        
          new
        
        
           Exp();
                      Exp Next 
        
        
          =
        
        
           
        
        
          new
        
        
           Exp();
          
48 Next.sp 
        
        
          =
        
        
           
        
        
          new
        
        
           SqlParameter(Left._Sql, Value);
                      Next.sp 
        
        
          =
        
        
           
        
        
          new
        
        
           SqlParameter(Left._Sql, Value);
          
49 Next.sps.Add(Next.sp);
                      Next.sps.Add(Next.sp);
          
50 Next._Sql 
        
        
          =
        
        
           Left._Sql 
        
        
          +
        
        
           
        
        
          "
        
        
           = @
        
        
          "
        
        
           
        
        
          +
        
        
           Left.Sql;
                      Next._Sql 
        
        
          =
        
        
           Left._Sql 
        
        
          +
        
        
           
        
        
          "
        
        
           = @
        
        
          "
        
        
           
        
        
          +
        
        
           Left.Sql;
          
51 return
        
        
           Next;
                      
        
        
          return
        
        
           Next;
          
52 }
                  }
        
      
      
        
53 public
      
      
         
      
      
        static
      
      
         Exp 
      
      
        operator
      
      
         
      
      
        !=
      
      
        (Exp Left, Object Value)
                
      
      
        public
      
      
         
      
      
        static
      
      
         Exp 
      
      
        operator
      
      
         
      
      
        !=
      
      
        (Exp Left, Object Value)
        
54 {
        
                
      
      
      
        
          {
          
55 Exp Next 
        
        
          =
        
        
           
        
        
          new
        
        
           Exp();
                      Exp Next 
        
        
          =
        
        
           
        
        
          new
        
        
           Exp();
          
56 Next.sp 
        
        
          =
        
        
           
        
        
          new
        
        
           SqlParameter(Left._Sql, Value);
                      Next.sp 
        
        
          =
        
        
           
        
        
          new
        
        
           SqlParameter(Left._Sql, Value);
          
57 Next.sps.Add(Next.sp);
                      Next.sps.Add(Next.sp);
          
58 Next._Sql 
        
        
          =
        
        
           Left._Sql 
        
        
          +
        
        
           
        
        
          "
        
        
           <> @
        
        
          "
        
        
           
        
        
          +
        
        
           Left._Sql;
                      Next._Sql 
        
        
          =
        
        
           Left._Sql 
        
        
          +
        
        
           
        
        
          "
        
        
           <> @
        
        
          "
        
        
           
        
        
          +
        
        
           Left._Sql;
          
59 return
        
        
           Next;
                      
        
        
          return
        
        
           Next;
          
60 }
                  }
        
      
      
        
61 
        
62 public
      
      
         
      
      
        static
      
      
         Exp 
      
      
        operator
      
      
         
      
      
        <
      
      
        (Exp Left, Object Value)
                
      
      
        public
      
      
         
      
      
        static
      
      
         Exp 
      
      
        operator
      
      
         
      
      
        <
      
      
        (Exp Left, Object Value)
        
63 {
        
                
      
      
      
        
          {
          
64 Exp Next 
        
        
          =
        
        
           
        
        
          new
        
        
           Exp();
                      Exp Next 
        
        
          =
        
        
           
        
        
          new
        
        
           Exp();
          
65 Next.sp 
        
        
          =
        
        
           
        
        
          new
        
        
           SqlParameter(Left._Sql, Value);
                      Next.sp 
        
        
          =
        
        
           
        
        
          new
        
        
           SqlParameter(Left._Sql, Value);
          
66 Next.sps.Add(Next.sp);
                      Next.sps.Add(Next.sp);
          
67 Next._Sql 
        
        
          =
        
        
           Left._Sql 
        
        
          +
        
        
           
        
        
          "
        
        
           < @
        
        
          "
        
        
           
        
        
          +
        
        
           Left._Sql;
                      Next._Sql 
        
        
          =
        
        
           Left._Sql 
        
        
          +
        
        
           
        
        
          "
        
        
           < @
        
        
          "
        
        
           
        
        
          +
        
        
           Left._Sql;
          
68 return
        
        
           Next;
                      
        
        
          return
        
        
           Next;
          
69 }
                  }
        
      
      
        
70 public
      
      
         
      
      
        static
      
      
         Exp 
      
      
        operator
      
      
         
      
      
        >
      
      
        (Exp Left, Object Value)
                
      
      
        public
      
      
         
      
      
        static
      
      
         Exp 
      
      
        operator
      
      
         
      
      
        >
      
      
        (Exp Left, Object Value)
        
71 {
        
                
      
      
      
        
          {
          
72 Exp Next 
        
        
          =
        
        
           
        
        
          new
        
        
           Exp();
                      Exp Next 
        
        
          =
        
        
           
        
        
          new
        
        
           Exp();
          
73 Next.sp 
        
        
          =
        
        
           
        
        
          new
        
        
           SqlParameter(Left._Sql, Value);
                      Next.sp 
        
        
          =
        
        
           
        
        
          new
        
        
           SqlParameter(Left._Sql, Value);
          
74 Next.sps.Add(Next.sp);
                      Next.sps.Add(Next.sp);
          
75 Next._Sql 
        
        
          =
        
        
           Left._Sql 
        
        
          +
        
        
           
        
        
          "
        
        
           > @
        
        
          "
        
        
           
        
        
          +
        
        
           Left._Sql;
                      Next._Sql 
        
        
          =
        
        
           Left._Sql 
        
        
          +
        
        
           
        
        
          "
        
        
           > @
        
        
          "
        
        
           
        
        
          +
        
        
           Left._Sql;
          
76 return
        
        
           Next;
                      
        
        
          return
        
        
           Next;
          
77 }
                  }
        
      
      
        
78 
        
79 public
      
      
         
      
      
        static
      
      
         Exp 
      
      
        operator
      
      
         
      
      
        %
      
      
        (Exp Left, Object Value)
                
      
      
        public
      
      
         
      
      
        static
      
      
         Exp 
      
      
        operator
      
      
         
      
      
        %
      
      
        (Exp Left, Object Value)
        
80 {
        
                
      
      
      
        
          {
          
81 Exp Next 
        
        
          =
        
        
           
        
        
          new
        
        
           Exp();
                      Exp Next 
        
        
          =
        
        
           
        
        
          new
        
        
           Exp();
          
82 Next.sp 
        
        
          =
        
        
           
        
        
          new
        
        
           SqlParameter(Left._Sql, Value);
                      Next.sp 
        
        
          =
        
        
           
        
        
          new
        
        
           SqlParameter(Left._Sql, Value);
          
83 Next.sps.Add(Next.sp);
                      Next.sps.Add(Next.sp);
          
84 Next._Sql 
        
        
          =
        
        
           Left._Sql 
        
        
          +
        
        
           
        
        
          "
        
        
           Like @
        
        
          "
        
        
           
        
        
          +
        
        
           Left._Sql;
                      Next._Sql 
        
        
          =
        
        
           Left._Sql 
        
        
          +
        
        
           
        
        
          "
        
        
           Like @
        
        
          "
        
        
           
        
        
          +
        
        
           Left._Sql;
          
85 return
        
        
           Next;
                      
        
        
          return
        
        
           Next;
          
86 }
                  }
        
      
      
        
87 
        
88 public
      
      
         
      
      
        static
      
      
         Exp 
      
      
        operator
      
      
         
      
      
        &
      
      
        (Exp Left, Exp Right)
                
      
      
        public
      
      
         
      
      
        static
      
      
         Exp 
      
      
        operator
      
      
         
      
      
        &
      
      
        (Exp Left, Exp Right)
        
89 {
        
                
      
      
      
        
          {
          
90 Exp Next 
        
        
          =
        
        
           
        
        
          new
        
        
           Exp();
                      Exp Next 
        
        
          =
        
        
           
        
        
          new
        
        
           Exp();
          
91 foreach
        
        
           (SqlParameter sp 
        
        
          in
        
        
           Left.sps)
                      
        
        
          foreach
        
        
           (SqlParameter sp 
        
        
          in
        
        
           Left.sps)
          
92 {
          
                      
        
        
        
          
            {
            
93 Next.sps.Add(sp);
                            Next.sps.Add(sp);
            
94 }
                        }
          
        
        
          
95 foreach
        
        
           (SqlParameter sp 
        
        
          in
        
        
           Right.sps)
                      
        
        
          foreach
        
        
           (SqlParameter sp 
        
        
          in
        
        
           Right.sps)
          
96 {
          
                      
        
        
        
          
            {
            
97 Next.sps.Add(sp);
                            Next.sps.Add(sp);
            
98 }
                        }
          
        
        
          
99 Next._Sql 
        
        
          =
        
        
           Left.Sql 
        
        
          +
        
        
           
        
        
          "
        
        
           AND 
        
        
          "
        
        
           
        
        
          +
        
        
           Right.Sql;
                      Next._Sql 
        
        
          =
        
        
           Left.Sql 
        
        
          +
        
        
           
        
        
          "
        
        
           AND 
        
        
          "
        
        
           
        
        
          +
        
        
           Right.Sql;
          
100 return
        
        
           Next;
                      
        
        
          return
        
        
           Next;
          
101 }
                  }
        
      
      
        
102 
        
103 
        
104 public
      
      
         
      
      
        static
      
      
         Exp 
      
      
        operator
      
      
         
      
      
        |
      
      
        (Exp Left, Exp Right)
                
      
      
        public
      
      
         
      
      
        static
      
      
         Exp 
      
      
        operator
      
      
         
      
      
        |
      
      
        (Exp Left, Exp Right)
        
105 {
        
                
      
      
      
        
          {
          
106 Exp Next 
        
        
          =
        
        
           
        
        
          new
        
        
           Exp();
                      Exp Next 
        
        
          =
        
        
           
        
        
          new
        
        
           Exp();
          
107 foreach
        
        
           (SqlParameter sp 
        
        
          in
        
        
           Left.sps)
                      
        
        
          foreach
        
        
           (SqlParameter sp 
        
        
          in
        
        
           Left.sps)
          
108 {
          
                      
        
        
        
          
            {
            
109 Next.sps.Add(sp);
                            Next.sps.Add(sp);
            
110 }
                        }
          
        
        
          
111 foreach
        
        
           (SqlParameter sp 
        
        
          in
        
        
           Right.sps)
                      
        
        
          foreach
        
        
           (SqlParameter sp 
        
        
          in
        
        
           Right.sps)
          
112 {
          
                      
        
        
        
          
            {
            
113 Next.sps.Add(sp);
                            Next.sps.Add(sp);
            
114 }
                        }
          
        
        
          
115 Next._Sql 
        
        
          =
        
        
           Left.Sql 
        
        
          +
        
        
           
        
        
          "
        
        
           OR 
        
        
          "
        
        
           
        
        
          +
        
        
           Right.Sql;
                      Next._Sql 
        
        
          =
        
        
           Left.Sql 
        
        
          +
        
        
           
        
        
          "
        
        
           OR 
        
        
          "
        
        
           
        
        
          +
        
        
           Right.Sql;
          
116 return
        
        
           Next;
                      
        
        
          return
        
        
           Next;
          
117 }
                  }
        
      
      
        
118 
        
119 public
      
      
         
      
      
        static
      
      
         Exp 
      
      
        operator
      
      
         
      
      
        ^
      
      
        (Exp Left, Exp Right)
                
      
      
        public
      
      
         
      
      
        static
      
      
         Exp 
      
      
        operator
      
      
         
      
      
        ^
      
      
        (Exp Left, Exp Right)
        
120 {
        
                
      
      
      
        
          {
          
121 Exp Next 
        
        
          =
        
        
           
        
        
          new
        
        
           Exp();
                      Exp Next 
        
        
          =
        
        
           
        
        
          new
        
        
           Exp();
          
122 foreach
        
        
           (SqlParameter sp 
        
        
          in
        
        
           Left.sps)
                      
        
        
          foreach
        
        
           (SqlParameter sp 
        
        
          in
        
        
           Left.sps)
          
123 {
          
                      
        
        
        
          
            {
            
124 Next.sps.Add(sp);
                            Next.sps.Add(sp);
            
125 }
                        }
          
        
        
          
126 foreach
        
        
           (SqlParameter sp 
        
        
          in
        
        
           Right.sps)
                      
        
        
          foreach
        
        
           (SqlParameter sp 
        
        
          in
        
        
           Right.sps)
          
127 {
          
                      
        
        
        
          
            {
            
128 Next.sps.Add(sp);
                            Next.sps.Add(sp);
            
129 }
                        }
          
        
        
          
130 Next._Sql 
        
        
          =
        
        
           Left.Sql 
        
        
          +
        
        
           
        
        
          "
        
        
           NOT 
        
        
          "
        
        
           
        
        
          +
        
        
           Right.Sql;
                      Next._Sql 
        
        
          =
        
        
           Left.Sql 
        
        
          +
        
        
           
        
        
          "
        
        
           NOT 
        
        
          "
        
        
           
        
        
          +
        
        
           Right.Sql;
          
131 return
        
        
           Next;
                      
        
        
          return
        
        
           Next;
          
132 }
                  }
        
      
      
        
133 }
            }
      
    
    
      
134 
         
    
  
   class
    
    
       Program
    
          
    
    
      class
    
    
       Program
      2
 {
      
          
    
    
    
      
        {
        3
 static
      
      
         
      
      
        void
      
      
         Main(
      
      
        string
      
      
        [] args)
                
      
      
        static
      
      
         
      
      
        void
      
      
         Main(
      
      
        string
      
      
        [] args)
        4
 {
        
                
      
      
      
        
          {
          5
 
          6
 Exp rs 
        
        
          =
        
        
           
        
        
          new
        
        
           Exp(
        
        
          "
        
        
          C1
        
        
          "
        
        
          ) 
        
        
          ==
        
        
           
        
        
          25
        
        
           
        
        
          &
        
        
           
        
        
          new
        
        
           Exp(
        
        
          "
        
        
          C2
        
        
          "
        
        
          ) 
        
        
          >
        
        
           
        
        
          3
        
        
           
        
        
          |
        
        
           
        
        
          new
        
        
           Exp(
        
        
          "
        
        
          C3
        
        
          "
        
        
          ) 
        
        
          <
        
        
           
        
        
          5
        
        
           
        
        
          ^
        
        
           
        
        
          new
        
        
           Exp(
        
        
          "
        
        
          C4
        
        
          "
        
        
          ) 
        
        
          %
        
        
           
        
        
          "
        
        
          hehe
        
        
          "
        
        
          ;
                      Exp rs 
        
        
          =
        
        
           
        
        
          new
        
        
           Exp(
        
        
          "
        
        
          C1
        
        
          "
        
        
          ) 
        
        
          ==
        
        
           
        
        
          25
        
        
           
        
        
          &
        
        
           
        
        
          new
        
        
           Exp(
        
        
          "
        
        
          C2
        
        
          "
        
        
          ) 
        
        
          >
        
        
           
        
        
          3
        
        
           
        
        
          |
        
        
           
        
        
          new
        
        
           Exp(
        
        
          "
        
        
          C3
        
        
          "
        
        
          ) 
        
        
          <
        
        
           
        
        
          5
        
        
           
        
        
          ^
        
        
           
        
        
          new
        
        
           Exp(
        
        
          "
        
        
          C4
        
        
          "
        
        
          ) 
        
        
          %
        
        
           
        
        
          "
        
        
          hehe
        
        
          "
        
        
          ;
          7
 Console.WriteLine(rs.Sql);
                      Console.WriteLine(rs.Sql);
          8
 foreach
        
        
           (SqlParameter sp 
        
        
          in
        
        
           rs.Sps)
                      
        
        
          foreach
        
        
           (SqlParameter sp 
        
        
          in
        
        
           rs.Sps)
          9
 {
          
                      
        
        
        
          
            {
            10
 Console.WriteLine(sp.ParameterName);
                            Console.WriteLine(sp.ParameterName);
            11
 }
                        }
          
        
        
          12
 Console.Read();
                      Console.Read();
          13
 }
                  }
        
      
      
        14
 }
            }
      
    
    
      15
 
      16
 class
    
    
       Exp
          
    
    
      class
    
    
       Exp
      17
 {
      
          
    
    
    
      
        {
        18
 private
      
      
         
      
      
        string
      
      
         _Sql;
                
      
      
        private
      
      
         
      
      
        string
      
      
         _Sql;
        19
 
        20
 private
      
      
         List
      
      
        <
      
      
        SqlParameter
      
      
        >
      
      
         sps;
                
      
      
        private
      
      
         List
      
      
        <
      
      
        SqlParameter
      
      
        >
      
      
         sps;
        21
 
        22
 public
      
      
         List
      
      
        <
      
      
        SqlParameter
      
      
        >
      
      
         Sps
                
      
      
        public
      
      
         List
      
      
        <
      
      
        SqlParameter
      
      
        >
      
      
         Sps
        23
 {
        
                
      
      
      
        
          {
          24
 get
        
        
           
        
        
        
          
            { 
          
          
            return
          
          
             sps; }
          
                      
        
        
          get
        
        
           
        
        
        
          
            { 
          
          
            return
          
          
             sps; }
          
        
        
          25
 set
        
        
           
        
        
        
          
            { sps 
          
          
            =
          
          
             value; }
          
                      
        
        
          set
        
        
           
        
        
        
          
            { sps 
          
          
            =
          
          
             value; }
          
        
        
          26
 }
                  }
        
      
      
        27
 
        28
 private
      
      
         SqlParameter sp;
                
      
      
        private
      
      
         SqlParameter sp;
        29
 
        30
 public
      
      
         
      
      
        string
      
      
         Sql
                
      
      
        public
      
      
         
      
      
        string
      
      
         Sql
        31
 {
        
                
      
      
      
        
          {
          32
 get
        
        
           
        
        
        
          
            { 
          
          
            return
          
          
             _Sql; }
          
                      
        
        
          get
        
        
           
        
        
        
          
            { 
          
          
            return
          
          
             _Sql; }
          
        
        
          33
 }
                  }
        
      
      
        34
 
        35
 private
      
      
         Exp()
                
      
      
        private
      
      
         Exp()
        36
 {
        
                
      
      
      
        
          {
          37
 sps 
        
        
          =
        
        
           
        
        
          new
        
        
           List
        
        
          <
        
        
          SqlParameter
        
        
          >
        
        
          ();
                      sps 
        
        
          =
        
        
           
        
        
          new
        
        
           List
        
        
          <
        
        
          SqlParameter
        
        
          >
        
        
          ();
          38
 }
                  }
        
      
      
        39
 
        40
 public
      
      
         Exp(
      
      
        string
      
      
         CollumnName)
                
      
      
        public
      
      
         Exp(
      
      
        string
      
      
         CollumnName)
        41
 {
        
                
      
      
      
        
          {
          42
 _Sql 
        
        
          =
        
        
           CollumnName;
                      _Sql 
        
        
          =
        
        
           CollumnName;
          43
 }
                  }
        
      
      
        44
 
        45
 public
      
      
         
      
      
        static
      
      
         Exp 
      
      
        operator
      
      
         
      
      
        ==
      
      
        (Exp Left, Object Value)
                
      
      
        public
      
      
         
      
      
        static
      
      
         Exp 
      
      
        operator
      
      
         
      
      
        ==
      
      
        (Exp Left, Object Value)
        46
 {
        
                
      
      
      
        
          {
          47
 Exp Next 
        
        
          =
        
        
           
        
        
          new
        
        
           Exp();
                      Exp Next 
        
        
          =
        
        
           
        
        
          new
        
        
           Exp();
          48
 Next.sp 
        
        
          =
        
        
           
        
        
          new
        
        
           SqlParameter(Left._Sql, Value);
                      Next.sp 
        
        
          =
        
        
           
        
        
          new
        
        
           SqlParameter(Left._Sql, Value);
          49
 Next.sps.Add(Next.sp);
                      Next.sps.Add(Next.sp);
          50
 Next._Sql 
        
        
          =
        
        
           Left._Sql 
        
        
          +
        
        
           
        
        
          "
        
        
           = @
        
        
          "
        
        
           
        
        
          +
        
        
           Left.Sql;
                      Next._Sql 
        
        
          =
        
        
           Left._Sql 
        
        
          +
        
        
           
        
        
          "
        
        
           = @
        
        
          "
        
        
           
        
        
          +
        
        
           Left.Sql;
          51
 return
        
        
           Next;
                      
        
        
          return
        
        
           Next;
          52
 }
                  }
        
      
      
        53
 public
      
      
         
      
      
        static
      
      
         Exp 
      
      
        operator
      
      
         
      
      
        !=
      
      
        (Exp Left, Object Value)
                
      
      
        public
      
      
         
      
      
        static
      
      
         Exp 
      
      
        operator
      
      
         
      
      
        !=
      
      
        (Exp Left, Object Value)
        54
 {
        
                
      
      
      
        
          {
          55
 Exp Next 
        
        
          =
        
        
           
        
        
          new
        
        
           Exp();
                      Exp Next 
        
        
          =
        
        
           
        
        
          new
        
        
           Exp();
          56
 Next.sp 
        
        
          =
        
        
           
        
        
          new
        
        
           SqlParameter(Left._Sql, Value);
                      Next.sp 
        
        
          =
        
        
           
        
        
          new
        
        
           SqlParameter(Left._Sql, Value);
          57
 Next.sps.Add(Next.sp);
                      Next.sps.Add(Next.sp);
          58
 Next._Sql 
        
        
          =
        
        
           Left._Sql 
        
        
          +
        
        
           
        
        
          "
        
        
           <> @
        
        
          "
        
        
           
        
        
          +
        
        
           Left._Sql;
                      Next._Sql 
        
        
          =
        
        
           Left._Sql 
        
        
          +
        
        
           
        
        
          "
        
        
           <> @
        
        
          "
        
        
           
        
        
          +
        
        
           Left._Sql;
          59
 return
        
        
           Next;
                      
        
        
          return
        
        
           Next;
          60
 }
                  }
        
      
      
        61
 
        62
 public
      
      
         
      
      
        static
      
      
         Exp 
      
      
        operator
      
      
         
      
      
        <
      
      
        (Exp Left, Object Value)
                
      
      
        public
      
      
         
      
      
        static
      
      
         Exp 
      
      
        operator
      
      
         
      
      
        <
      
      
        (Exp Left, Object Value)
        63
 {
        
                
      
      
      
        
          {
          64
 Exp Next 
        
        
          =
        
        
           
        
        
          new
        
        
           Exp();
                      Exp Next 
        
        
          =
        
        
           
        
        
          new
        
        
           Exp();
          65
 Next.sp 
        
        
          =
        
        
           
        
        
          new
        
        
           SqlParameter(Left._Sql, Value);
                      Next.sp 
        
        
          =
        
        
           
        
        
          new
        
        
           SqlParameter(Left._Sql, Value);
          66
 Next.sps.Add(Next.sp);
                      Next.sps.Add(Next.sp);
          67
 Next._Sql 
        
        
          =
        
        
           Left._Sql 
        
        
          +
        
        
           
        
        
          "
        
        
           < @
        
        
          "
        
        
           
        
        
          +
        
        
           Left._Sql;
                      Next._Sql 
        
        
          =
        
        
           Left._Sql 
        
        
          +
        
        
           
        
        
          "
        
        
           < @
        
        
          "
        
        
           
        
        
          +
        
        
           Left._Sql;
          68
 return
        
        
           Next;
                      
        
        
          return
        
        
           Next;
          69
 }
                  }
        
      
      
        70
 public
      
      
         
      
      
        static
      
      
         Exp 
      
      
        operator
      
      
         
      
      
        >
      
      
        (Exp Left, Object Value)
                
      
      
        public
      
      
         
      
      
        static
      
      
         Exp 
      
      
        operator
      
      
         
      
      
        >
      
      
        (Exp Left, Object Value)
        71
 {
        
                
      
      
      
        
          {
          72
 Exp Next 
        
        
          =
        
        
           
        
        
          new
        
        
           Exp();
                      Exp Next 
        
        
          =
        
        
           
        
        
          new
        
        
           Exp();
          73
 Next.sp 
        
        
          =
        
        
           
        
        
          new
        
        
           SqlParameter(Left._Sql, Value);
                      Next.sp 
        
        
          =
        
        
           
        
        
          new
        
        
           SqlParameter(Left._Sql, Value);
          74
 Next.sps.Add(Next.sp);
                      Next.sps.Add(Next.sp);
          75
 Next._Sql 
        
        
          =
        
        
           Left._Sql 
        
        
          +
        
        
           
        
        
          "
        
        
           > @
        
        
          "
        
        
           
        
        
          +
        
        
           Left._Sql;
                      Next._Sql 
        
        
          =
        
        
           Left._Sql 
        
        
          +
        
        
           
        
        
          "
        
        
           > @
        
        
          "
        
        
           
        
        
          +
        
        
           Left._Sql;
          76
 return
        
        
           Next;
                      
        
        
          return
        
        
           Next;
          77
 }
                  }
        
      
      
        78
 
        79
 public
      
      
         
      
      
        static
      
      
         Exp 
      
      
        operator
      
      
         
      
      
        %
      
      
        (Exp Left, Object Value)
                
      
      
        public
      
      
         
      
      
        static
      
      
         Exp 
      
      
        operator
      
      
         
      
      
        %
      
      
        (Exp Left, Object Value)
        80
 {
        
                
      
      
      
        
          {
          81
 Exp Next 
        
        
          =
        
        
           
        
        
          new
        
        
           Exp();
                      Exp Next 
        
        
          =
        
        
           
        
        
          new
        
        
           Exp();
          82
 Next.sp 
        
        
          =
        
        
           
        
        
          new
        
        
           SqlParameter(Left._Sql, Value);
                      Next.sp 
        
        
          =
        
        
           
        
        
          new
        
        
           SqlParameter(Left._Sql, Value);
          83
 Next.sps.Add(Next.sp);
                      Next.sps.Add(Next.sp);
          84
 Next._Sql 
        
        
          =
        
        
           Left._Sql 
        
        
          +
        
        
           
        
        
          "
        
        
           Like @
        
        
          "
        
        
           
        
        
          +
        
        
           Left._Sql;
                      Next._Sql 
        
        
          =
        
        
           Left._Sql 
        
        
          +
        
        
           
        
        
          "
        
        
           Like @
        
        
          "
        
        
           
        
        
          +
        
        
           Left._Sql;
          85
 return
        
        
           Next;
                      
        
        
          return
        
        
           Next;
          86
 }
                  }
        
      
      
        87
 
        88
 public
      
      
         
      
      
        static
      
      
         Exp 
      
      
        operator
      
      
         
      
      
        &
      
      
        (Exp Left, Exp Right)
                
      
      
        public
      
      
         
      
      
        static
      
      
         Exp 
      
      
        operator
      
      
         
      
      
        &
      
      
        (Exp Left, Exp Right)
        89
 {
        
                
      
      
      
        
          {
          90
 Exp Next 
        
        
          =
        
        
           
        
        
          new
        
        
           Exp();
                      Exp Next 
        
        
          =
        
        
           
        
        
          new
        
        
           Exp();
          91
 foreach
        
        
           (SqlParameter sp 
        
        
          in
        
        
           Left.sps)
                      
        
        
          foreach
        
        
           (SqlParameter sp 
        
        
          in
        
        
           Left.sps)
          92
 {
          
                      
        
        
        
          
            {
            93
 Next.sps.Add(sp);
                            Next.sps.Add(sp);
            94
 }
                        }
          
        
        
          95
 foreach
        
        
           (SqlParameter sp 
        
        
          in
        
        
           Right.sps)
                      
        
        
          foreach
        
        
           (SqlParameter sp 
        
        
          in
        
        
           Right.sps)
          96
 {
          
                      
        
        
        
          
            {
            97
 Next.sps.Add(sp);
                            Next.sps.Add(sp);
            98
 }
                        }
          
        
        
          99
 Next._Sql 
        
        
          =
        
        
           Left.Sql 
        
        
          +
        
        
           
        
        
          "
        
        
           AND 
        
        
          "
        
        
           
        
        
          +
        
        
           Right.Sql;
                      Next._Sql 
        
        
          =
        
        
           Left.Sql 
        
        
          +
        
        
           
        
        
          "
        
        
           AND 
        
        
          "
        
        
           
        
        
          +
        
        
           Right.Sql;
          100
 return
        
        
           Next;
                      
        
        
          return
        
        
           Next;
          101
 }
                  }
        
      
      
        102
 
        103
 
        104
 public
      
      
         
      
      
        static
      
      
         Exp 
      
      
        operator
      
      
         
      
      
        |
      
      
        (Exp Left, Exp Right)
                
      
      
        public
      
      
         
      
      
        static
      
      
         Exp 
      
      
        operator
      
      
         
      
      
        |
      
      
        (Exp Left, Exp Right)
        105
 {
        
                
      
      
      
        
          {
          106
 Exp Next 
        
        
          =
        
        
           
        
        
          new
        
        
           Exp();
                      Exp Next 
        
        
          =
        
        
           
        
        
          new
        
        
           Exp();
          107
 foreach
        
        
           (SqlParameter sp 
        
        
          in
        
        
           Left.sps)
                      
        
        
          foreach
        
        
           (SqlParameter sp 
        
        
          in
        
        
           Left.sps)
          108
 {
          
                      
        
        
        
          
            {
            109
 Next.sps.Add(sp);
                            Next.sps.Add(sp);
            110
 }
                        }
          
        
        
          111
 foreach
        
        
           (SqlParameter sp 
        
        
          in
        
        
           Right.sps)
                      
        
        
          foreach
        
        
           (SqlParameter sp 
        
        
          in
        
        
           Right.sps)
          112
 {
          
                      
        
        
        
          
            {
            113
 Next.sps.Add(sp);
                            Next.sps.Add(sp);
            114
 }
                        }
          
        
        
          115
 Next._Sql 
        
        
          =
        
        
           Left.Sql 
        
        
          +
        
        
           
        
        
          "
        
        
           OR 
        
        
          "
        
        
           
        
        
          +
        
        
           Right.Sql;
                      Next._Sql 
        
        
          =
        
        
           Left.Sql 
        
        
          +
        
        
           
        
        
          "
        
        
           OR 
        
        
          "
        
        
           
        
        
          +
        
        
           Right.Sql;
          116
 return
        
        
           Next;
                      
        
        
          return
        
        
           Next;
          117
 }
                  }
        
      
      
        118
 
        119
 public
      
      
         
      
      
        static
      
      
         Exp 
      
      
        operator
      
      
         
      
      
        ^
      
      
        (Exp Left, Exp Right)
                
      
      
        public
      
      
         
      
      
        static
      
      
         Exp 
      
      
        operator
      
      
         
      
      
        ^
      
      
        (Exp Left, Exp Right)
        120
 {
        
                
      
      
      
        
          {
          121
 Exp Next 
        
        
          =
        
        
           
        
        
          new
        
        
           Exp();
                      Exp Next 
        
        
          =
        
        
           
        
        
          new
        
        
           Exp();
          122
 foreach
        
        
           (SqlParameter sp 
        
        
          in
        
        
           Left.sps)
                      
        
        
          foreach
        
        
           (SqlParameter sp 
        
        
          in
        
        
           Left.sps)
          123
 {
          
                      
        
        
        
          
            {
            124
 Next.sps.Add(sp);
                            Next.sps.Add(sp);
            125
 }
                        }
          
        
        
          126
 foreach
        
        
           (SqlParameter sp 
        
        
          in
        
        
           Right.sps)
                      
        
        
          foreach
        
        
           (SqlParameter sp 
        
        
          in
        
        
           Right.sps)
          127
 {
          
                      
        
        
        
          
            {
            128
 Next.sps.Add(sp);
                            Next.sps.Add(sp);
            129
 }
                        }
          
        
        
          130
 Next._Sql 
        
        
          =
        
        
           Left.Sql 
        
        
          +
        
        
           
        
        
          "
        
        
           NOT 
        
        
          "
        
        
           
        
        
          +
        
        
           Right.Sql;
                      Next._Sql 
        
        
          =
        
        
           Left.Sql 
        
        
          +
        
        
           
        
        
          "
        
        
           NOT 
        
        
          "
        
        
           
        
        
          +
        
        
           Right.Sql;
          131
 return
        
        
           Next;
                      
        
        
          return
        
        
           Next;
          132
 }
                  }
        
      
      
        133
 }
            }
      
    
    
      134
 
         
    
  


 
          
     
     
                
       
					 
					