1
- using System . Collections . Generic ;
1
+ using System . Collections ;
2
+ using System . Collections . Generic ;
2
3
using System . Linq . Dynamic . Core . Tests . Helpers . Models ;
4
+ using System . Reflection ;
3
5
using Xunit ;
4
6
5
7
namespace System . Linq . Dynamic . Core . Tests
6
8
{
7
9
public partial class QueryableTests
8
10
{
9
11
[ Fact ]
10
- public void Contains_Dynamic_StringList ( )
12
+ public void Contains_Dynamic_ListWithStrings ( )
11
13
{
12
- //Arrange
14
+ // Arrange
13
15
var baseQuery = User . GenerateSampleModels ( 100 ) . AsQueryable ( ) ;
14
16
var list = new List < string > { "User1" , "User5" , "User10" } ;
15
17
16
- //Act
18
+ // Act
17
19
var realQuery = baseQuery . Where ( x => list . Contains ( x . UserName ) ) . Select ( x => x . Id ) ;
18
20
var testQuery = baseQuery . Where ( "@0.Contains(UserName)" , list ) . Select ( "Id" ) ;
19
21
20
- //Assert
22
+ // Assert
21
23
Assert . Equal ( realQuery . ToArray ( ) , testQuery . Cast < Guid > ( ) . ToArray ( ) ) ;
22
24
}
25
+
26
+ [ Fact ]
27
+ [ Trait ( "Issue" , "130" ) ]
28
+ public void Contains_Dynamic_ListWithDynamicObjects ( )
29
+ {
30
+ // Arrange
31
+ var baseQuery = User . GenerateSampleModels ( 100 ) . AsQueryable ( ) ;
32
+ var list = new List < dynamic > { new { UserName = "User1" } } ;
33
+
34
+ var keyType = DynamicClassFactory . CreateType ( new [ ] { new DynamicProperty ( "UserName" , typeof ( string ) ) } ) ;
35
+ var keyVals = ( IList ) CreateGenericInstance ( typeof ( List < > ) , new [ ] { keyType } ) ;
36
+
37
+ var keyVal = Activator . CreateInstance ( keyType ) ;
38
+ keyType . GetProperty ( "UserName" ) . SetValue ( keyVal , "User1" ) ;
39
+ keyVals . Add ( keyVal ) ;
40
+
41
+ // Act
42
+ var realQuery = baseQuery . Where ( x => list . Contains ( new { UserName = x . UserName } ) ) . Select ( x => x . Id ) ;
43
+ var testQuery = baseQuery . Where ( "@0.Contains(new(it.UserName as UserName))" , keyVals ) . Select ( "Id" ) ;
44
+
45
+ // Assert
46
+ Assert . Equal ( realQuery . ToArray ( ) , testQuery . Cast < Guid > ( ) . ToArray ( ) ) ;
47
+ }
48
+
49
+ private object CreateGenericInstance ( Type type , Type [ ] types , params dynamic [ ] ctorParams )
50
+ {
51
+ Type genType = type . MakeGenericType ( types ) ;
52
+
53
+ var constructor = genType . GetConstructors ( ) . First ( ) ;
54
+ return constructor . Invoke ( ctorParams ) ;
55
+ }
23
56
}
24
- }
57
+ }
0 commit comments