@@ -141,15 +141,129 @@ public void AnonymousClassSolrResult()
141
141
[ Fact ]
142
142
public void SelectDerivedWithCast ( )
143
143
{
144
- IQueryable < DerivedProduct > derivedProducts = Product . SolrOperations . Value . AsQueryable ( ) . Where ( p => p . Id != null )
145
- . Select ( p => new DerivedProduct { Id2 = p . Id } ) . Where ( p => p . Id2 != null ) ;
144
+ IQueryable < DerivedProduct > derivedProducts = Product . SolrOperations . Value . AsQueryable ( )
145
+ . Where ( p => p . Id != null && p . Categories . Any ( ) )
146
+ . Select ( p => new DerivedProduct { Id2 = p . Id , Categories = p . Categories } )
147
+ . Where ( p => p . Id2 != null ) ;
146
148
147
149
IQueryable < Product > q2 = derivedProducts . Cast < Product > ( ) ;
148
150
149
151
var t1 = q2 . ToSolrQueryResults ( ) ;
150
152
151
153
Assert . NotNull ( t1 ) ;
152
- Assert . NotNull ( t1 [ 0 ] . Id ) ;
154
+ Assert . NotNull ( t1 [ 0 ] . Categories ) ;
155
+ Assert . Null ( t1 [ 0 ] . Id ) ;
156
+ Assert . True ( t1 . NumFound > 0 ) ;
157
+ }
158
+
159
+ [ Fact ]
160
+ public void SelectDerivedWithCastToInterface ( )
161
+ {
162
+ IQueryable < DerivedProduct > derivedProducts = Product . SolrOperations . Value . AsQueryable ( )
163
+ . Where ( p => p . Id != null && p . Categories . Any ( ) )
164
+ . Select ( p => new DerivedProduct { Id2 = p . Id , Categories = p . Categories } )
165
+ . Where ( p => p . Id2 != null ) ;
166
+
167
+ IQueryable < IProduct > q2 = derivedProducts . Cast < IProduct > ( ) ;
168
+
169
+ SolrQueryResults < IProduct > t1 = q2 . ToSolrQueryResults ( ) ;
170
+
171
+ Assert . NotNull ( t1 ) ;
172
+ Assert . NotNull ( t1 [ 0 ] . Categories ) ;
173
+ Assert . Null ( t1 [ 0 ] . Id ) ;
174
+ Assert . True ( t1 . NumFound > 0 ) ;
175
+ }
176
+
177
+ [ Fact ]
178
+ public void SelectDerivedWithDoubleCast ( )
179
+ {
180
+ IQueryable < DerivedDerivedProduct > derivedProducts = Product . SolrOperations . Value . AsQueryable ( )
181
+ . Where ( p => p . Id != null && p . Categories . Any ( ) )
182
+ . Select ( p => new DerivedDerivedProduct { Id2 = p . Id , Id3 = p . Id , Categories = p . Categories } )
183
+ . Where ( p => p . Id3 != null ) ;
184
+
185
+ IQueryable < Product > q2 = derivedProducts . Cast < DerivedProduct > ( ) . Cast < Product > ( ) ;
186
+
187
+ var t1 = q2 . ToSolrQueryResults ( ) ;
188
+
189
+ Assert . NotNull ( t1 ) ;
190
+ Assert . NotNull ( t1 [ 0 ] . Categories ) ;
191
+ Assert . Null ( t1 [ 0 ] . Id ) ;
192
+ Assert . True ( t1 . NumFound > 0 ) ;
193
+ }
194
+
195
+ [ Fact ]
196
+ public void FilterAfterCastNotWorking ( )
197
+ {
198
+ IQueryable < DerivedDerivedProduct > derivedProducts = Product . SolrOperations . Value . AsQueryable ( )
199
+ . Where ( p => p . Id != null && p . Categories . Any ( ) )
200
+ . Select ( p => new DerivedDerivedProduct { Id2 = p . Id , Id3 = p . Id , Categories = p . Categories } )
201
+ . Where ( p => p . Id3 != null ) ;
202
+
203
+ IQueryable < Product > q2 = derivedProducts . Cast < Product > ( ) . Where ( p => p . Id != null ) ;
204
+
205
+ Assert . Throws < InvalidOperationException > ( ( ) => q2 . ToSolrQueryResults ( ) ) ;
206
+ }
207
+
208
+ [ Fact ]
209
+ public void CastToWrongTypeNotWorking ( )
210
+ {
211
+ IQueryable < DerivedProduct > derivedProducts = Product . SolrOperations . Value . AsQueryable ( )
212
+ . Where ( p => p . Id != null && p . Categories . Any ( ) )
213
+ . Select ( p => new DerivedProduct { Id2 = p . Id , Categories = p . Categories } )
214
+ . Where ( p => p . Id2 != null ) ;
215
+
216
+ var q2 = derivedProducts . Cast < DerivedDerivedProduct > ( ) ;
217
+
218
+ Assert . Throws < InvalidCastException > ( ( ) => q2 . ToSolrQueryResults ( ) ) ;
219
+ }
220
+
221
+ [ Fact ]
222
+ public void MethodsWhichNotNeedContextWorksAfterCast ( )
223
+ {
224
+ IQueryable < DerivedDerivedProduct > derivedProducts = Product . SolrOperations . Value . AsQueryable ( )
225
+ . Where ( p => p . Id != null && p . Categories . Any ( ) )
226
+ . Select ( p => new DerivedDerivedProduct { Id2 = p . Id , Id3 = p . Id , Categories = p . Categories } )
227
+ . Where ( p => p . Id3 != null ) ;
228
+
229
+ Product q2 = derivedProducts . Cast < Product > ( ) . Skip ( 1 ) . Take ( 1 ) . FirstOrDefault ( ) ;
230
+
231
+ Assert . NotNull ( q2 ) ;
232
+ }
233
+
234
+ [ Fact ]
235
+ public void SelectMultipleCopiesOfField ( )
236
+ {
237
+ IQueryable < DerivedDerivedProduct > q1 = Product . SolrOperations . Value . AsQueryable ( )
238
+ . Where ( p => p . Id != null && p . Categories . Any ( ) )
239
+ . Select ( p => new DerivedDerivedProduct { Id2 = p . Id , Id3 = p . Id , Categories = p . Categories } )
240
+ . Where ( p => p . Id2 != null ) ;
241
+
242
+ var t1 = q1 . ToSolrQueryResults ( ) ;
243
+
244
+ Assert . NotNull ( t1 ) ;
245
+ Assert . NotNull ( t1 [ 0 ] . Id2 ) ;
246
+ Assert . Equal ( t1 [ 0 ] . Id2 , t1 [ 0 ] . Id3 ) ;
247
+ Assert . NotNull ( t1 [ 0 ] . Categories ) ;
248
+ Assert . Null ( t1 [ 0 ] . Id ) ;
249
+ Assert . True ( t1 . NumFound > 0 ) ;
250
+ }
251
+
252
+ [ Fact ]
253
+ public void SelectAnyAfterSelect ( )
254
+ {
255
+ IQueryable < DerivedProduct > derivedProducts = Product . SolrOperations . Value . AsQueryable ( )
256
+ . Where ( p => p . Id != null )
257
+ . Select ( p => new DerivedProduct { Id2 = p . Id , Categories = p . Categories } )
258
+ . Where ( p => p . Id2 != null && p . Categories . Any ( ) ) ;
259
+
260
+ IQueryable < Product > q2 = derivedProducts . Cast < Product > ( ) ;
261
+
262
+ var t1 = q2 . ToSolrQueryResults ( ) ;
263
+
264
+ Assert . NotNull ( t1 ) ;
265
+ Assert . NotNull ( t1 [ 0 ] . Categories ) ;
266
+ Assert . Null ( t1 [ 0 ] . Id ) ;
153
267
Assert . True ( t1 . NumFound > 0 ) ;
154
268
}
155
269
0 commit comments