@@ -147,53 +147,34 @@ public virtual SqlExpression<T> Where(string sqlFilter, params object[] filterPa
147
147
148
148
public virtual SqlExpression < T > Where ( Expression < Func < T , bool > > predicate )
149
149
{
150
- if ( predicate != null )
151
- {
152
- And ( predicate ) ;
153
- }
154
- else
155
- {
156
- underlyingExpression = null ;
157
- whereExpression = string . Empty ;
158
- }
159
-
150
+ AppendToWhere ( "AND" , predicate ) ;
160
151
return this ;
161
152
}
162
153
163
154
public virtual SqlExpression < T > And ( Expression < Func < T , bool > > predicate )
164
155
{
165
- if ( predicate != null )
166
- {
167
- if ( underlyingExpression == null )
168
- underlyingExpression = predicate ;
169
- else
170
- underlyingExpression = underlyingExpression . And ( predicate ) ;
171
-
172
- ProcessInternalExpression ( ) ;
173
- }
156
+ AppendToWhere ( "AND" , predicate ) ;
174
157
return this ;
175
158
}
176
159
177
160
public virtual SqlExpression < T > Or ( Expression < Func < T , bool > > predicate )
178
161
{
179
- if ( predicate != null )
180
- {
181
- if ( underlyingExpression == null )
182
- underlyingExpression = predicate ;
183
- else
184
- underlyingExpression = underlyingExpression . Or ( predicate ) ;
185
-
186
- ProcessInternalExpression ( ) ;
187
- }
162
+ AppendToWhere ( "OR" , predicate ) ;
188
163
return this ;
189
164
}
190
165
191
- private void ProcessInternalExpression ( )
166
+ protected void AppendToWhere ( string operand , Expression predicate )
192
167
{
168
+ if ( predicate == null )
169
+ return ;
170
+
193
171
useFieldName = true ;
194
172
sep = " " ;
195
- whereExpression = Visit ( underlyingExpression ) . ToString ( ) ;
196
- if ( ! string . IsNullOrEmpty ( whereExpression ) ) whereExpression = ( WhereStatementWithoutWhereString ? "" : "WHERE " ) + whereExpression ;
173
+ var newExpr = Visit ( predicate ) . ToString ( ) ;
174
+ whereExpression = string . IsNullOrEmpty ( whereExpression )
175
+ ? ( WhereStatementWithoutWhereString ? "" : "WHERE " )
176
+ : whereExpression + " " + operand + " " ;
177
+ whereExpression += newExpr ;
197
178
}
198
179
199
180
public virtual SqlExpression < T > GroupBy ( )
@@ -1263,6 +1244,8 @@ protected virtual object VisitColumnAccessMethod(MethodCallExpression m)
1263
1244
var quotedColName = Visit ( m . Object ) ;
1264
1245
var statement = "" ;
1265
1246
1247
+ var wildcardArg = args . Count > 0 ? OrmLiteConfig . DialectProvider . EscapeWildcards ( args [ 0 ] . ToString ( ) ) : "" ;
1248
+ var escapeSuffix = wildcardArg . IndexOf ( '^' ) >= 0 ? " escape '^'" : "" ;
1266
1249
switch ( m . Method . Name )
1267
1250
{
1268
1251
case "Trim" :
@@ -1283,43 +1266,43 @@ protected virtual object VisitColumnAccessMethod(MethodCallExpression m)
1283
1266
case "StartsWith" :
1284
1267
if ( ! OrmLiteConfig . StripUpperInLike )
1285
1268
{
1286
- statement = string . Format ( "upper({0}) like {1} escape '^' " ,
1269
+ statement = string . Format ( "upper({0}) like {1}{2} " ,
1287
1270
quotedColName , OrmLiteConfig . DialectProvider . GetQuotedValue (
1288
- OrmLiteConfig . DialectProvider . EscapeWildcards ( args [ 0 ] . ToString ( ) ) . ToUpper ( ) + "%" ) ) ;
1271
+ wildcardArg . ToUpper ( ) + "%" ) , escapeSuffix ) ;
1289
1272
}
1290
1273
else
1291
1274
{
1292
- statement = string . Format ( "{0} like {1} escape '^' " ,
1275
+ statement = string . Format ( "{0} like {1}{2} " ,
1293
1276
quotedColName , OrmLiteConfig . DialectProvider . GetQuotedValue (
1294
- OrmLiteConfig . DialectProvider . EscapeWildcards ( args [ 0 ] . ToString ( ) ) + "%" ) ) ;
1277
+ wildcardArg + "%" ) , escapeSuffix ) ;
1295
1278
}
1296
1279
break ;
1297
1280
case "EndsWith" :
1298
1281
if ( ! OrmLiteConfig . StripUpperInLike )
1299
1282
{
1300
- statement = string . Format ( "upper({0}) like {1} escape '^' " ,
1283
+ statement = string . Format ( "upper({0}) like {1}{2} " ,
1301
1284
quotedColName , OrmLiteConfig . DialectProvider . GetQuotedValue ( "%" +
1302
- OrmLiteConfig . DialectProvider . EscapeWildcards ( args [ 0 ] . ToString ( ) ) . ToUpper ( ) ) ) ;
1285
+ wildcardArg . ToUpper ( ) ) , escapeSuffix ) ;
1303
1286
}
1304
1287
else
1305
1288
{
1306
- statement = string . Format ( "{0} like {1} escape '^' " ,
1289
+ statement = string . Format ( "{0} like {1}{2} " ,
1307
1290
quotedColName , OrmLiteConfig . DialectProvider . GetQuotedValue ( "%" +
1308
- OrmLiteConfig . DialectProvider . EscapeWildcards ( args [ 0 ] . ToString ( ) ) ) ) ;
1291
+ wildcardArg ) , escapeSuffix ) ;
1309
1292
}
1310
1293
break ;
1311
1294
case "Contains" :
1312
1295
if ( ! OrmLiteConfig . StripUpperInLike )
1313
1296
{
1314
- statement = string . Format ( "upper({0}) like {1} escape '^' " ,
1297
+ statement = string . Format ( "upper({0}) like {1}{2} " ,
1315
1298
quotedColName , OrmLiteConfig . DialectProvider . GetQuotedValue ( "%" +
1316
- OrmLiteConfig . DialectProvider . EscapeWildcards ( args [ 0 ] . ToString ( ) ) . ToUpper ( ) + "%" ) ) ;
1299
+ wildcardArg . ToUpper ( ) + "%" ) , escapeSuffix ) ;
1317
1300
}
1318
1301
else
1319
1302
{
1320
- statement = string . Format ( "{0} like {1} escape '^' " ,
1303
+ statement = string . Format ( "{0} like {1}{2} " ,
1321
1304
quotedColName , OrmLiteConfig . DialectProvider . GetQuotedValue ( "%" +
1322
- OrmLiteConfig . DialectProvider . EscapeWildcards ( args [ 0 ] . ToString ( ) ) + "%" ) ) ;
1305
+ wildcardArg + "%" ) , escapeSuffix ) ;
1323
1306
}
1324
1307
break ;
1325
1308
case "Substring" :
0 commit comments