7
7
using System . Reflection ;
8
8
using ConsoleAppEF2 . Database ;
9
9
using Newtonsoft . Json ;
10
- using Newtonsoft . Json . Linq ;
11
10
12
11
namespace ConsoleAppEF2
13
12
{
@@ -18,11 +17,17 @@ public class NestedDto
18
17
public string Name { get ; set ; }
19
18
20
19
public NestedDto2 NestedDto2 { get ; set ; }
20
+ }
21
21
22
+ public class NestedDto2
23
+ {
24
+ public string Name2 { get ; set ; }
22
25
26
+ public int Id { get ; set ; }
27
+ public NestedDto3 NestedDto3 { get ; set ; }
23
28
}
24
29
25
- public class NestedDto2
30
+ public class NestedDto3
26
31
{
27
32
public string Name2 { get ; set ; }
28
33
@@ -50,129 +55,18 @@ public Type ResolveType(string typeName)
50
55
}
51
56
}
52
57
53
- private static object GetObj ( )
54
- {
55
- return new
56
- {
57
- Id = 5 ,
58
- Value = 400
59
- } ;
60
- }
61
-
62
- class X : DynamicClass
63
- {
64
-
65
- }
66
-
67
- private static IQueryable GetQueryable ( )
68
- {
69
- var random = new Random ( ( int ) DateTime . Now . Ticks ) ;
70
-
71
- var jt = typeof ( JToken ) ;
72
-
73
- var em = jt . GetTypeInfo ( ) . GetDeclaredMethods ( "op_Explicit" ) ;
74
- var im = jt . GetTypeInfo ( ) . GetDeclaredMethods ( "op_Explicit" ) ;
75
-
76
- var j = new JObject
77
- {
78
- { "Id" , new JValue ( 9 ) } ,
79
- { "Name" , new JValue ( "Test" ) }
80
- } ;
81
-
82
- //(j["Id"] as JValue).Value
83
-
84
- IQueryable jarray = new [ ] { j } . AsQueryable ( ) ;
85
- var jresult = jarray . Select ( "new (int(Id) as Id, string(Name) as Name)" ) ;
86
-
87
- var an = jresult . Any ( "Id > 4" ) ;
88
-
89
-
90
- var dx = new X ( ) ;
91
- dx [ "Id" ] = 5 ;
92
-
93
- IQueryable srcDX = new [ ] { dx } . AsQueryable ( ) ;
94
- var b = srcDX . Select ( "new (Id.ToString() as Id)" ) ;
95
- var anyDX = b . Any ( "int.Parse(Id) > 4" ) ;
96
-
97
- var x = Enumerable . Range ( 0 , 10 ) . Select ( i => new
98
- {
99
- Id = i ,
100
- Value = random . Next ( )
101
- } ) . AsQueryable ( ) ;
102
-
103
- //var any = x.Any("Id > 4");
104
-
105
- //var obj = new
106
- //{
107
- // Id = 5,
108
- // Value = random.Next()
109
- //};
110
- //var x2 = Enumerable.Range(0, 1).Select(_ => obj).AsQueryable();
111
- //var any2 = x.Any("Id > 4");
112
-
113
- //var o = GetObj();
114
- //var t = o.GetType();
115
- //IQueryable source = new[] { o }.AsQueryable();
116
- //// source.ElementType = t;
117
-
118
- //var x2b = new[] { o }.AsQueryable();
119
- //var any2function = x2b.Any(null, "Id > 4", t);
120
-
121
- //var any2b = x2b.Any("Id > 4");
122
-
123
- //var x3 = new[] { obj }.AsQueryable();
124
- //var any3 = x3.Any("Id > 4");
125
-
126
- return x . Select ( "new (it as Id, @0 as Value)" , random . Next ( ) ) ;
127
- // return x.AsQueryable(); //x.AsQueryable().Select("new (Id, Value)");
128
- }
129
-
130
- public static IQueryable Transform ( this IQueryable source , Type resultType )
58
+ static void Main ( string [ ] args )
131
59
{
132
- var resultProperties = resultType . GetProperties ( ) . Where ( p => p . CanWrite ) ;
60
+ var q = new [ ] { new NestedDto ( ) , new NestedDto { NestedDto2 = new NestedDto2 { NestedDto3 = new NestedDto3 { Id = 42 } } } } . AsQueryable ( ) ;
133
61
134
- ParameterExpression s = Expression . Parameter ( source . ElementType , "s" ) ;
62
+ var np1 = q . Select ( "np(it.NestedDto2.NestedDto3.Id, 0)" ) ;
63
+ var npResult1 = np1 . ToDynamicList < int > ( ) ;
64
+ Console . WriteLine ( "npResult1 {0}" , JsonConvert . SerializeObject ( npResult1 , Formatting . Indented ) ) ;
135
65
136
- var memberBindings =
137
- resultProperties . Select ( p =>
138
- Expression . Bind ( resultType . GetMember ( p . Name ) [ 0 ] , Expression . Property ( s , p . Name ) ) ) . OfType < MemberBinding > ( ) ;
66
+ var np2 = q . Select ( "np(it.NestedDto2.NestedDto3.Id)" ) ;
67
+ var npResult2 = np2 . ToDynamicList < int ? > ( ) ;
68
+ Console . WriteLine ( "npResult2 {0}" , JsonConvert . SerializeObject ( npResult2 , Formatting . Indented ) ) ;
139
69
140
- Expression memberInit = Expression . MemberInit (
141
- Expression . New ( resultType ) ,
142
- memberBindings
143
- ) ;
144
-
145
- var memberInitLambda = Expression . Lambda ( memberInit , s ) ;
146
-
147
- var typeArgs = new [ ]
148
- {
149
- source . ElementType ,
150
- memberInit . Type
151
- } ;
152
-
153
- var mc = Expression . Call ( typeof ( Queryable ) , "Select" , typeArgs , source . Expression , memberInitLambda ) ;
154
-
155
- var query = source . Provider . CreateQuery ( mc ) ;
156
-
157
- return query ;
158
- }
159
-
160
- public static IQueryable < T > EmptyQueryByExample < T > ( this T _ ) => Enumerable . Empty < T > ( ) . AsQueryable ( ) ;
161
-
162
-
163
- private static TResult Execute < TResult > ( MethodInfo operatorMethodInfo , IQueryable source , Expression expression , Type t = null )
164
- {
165
- operatorMethodInfo = operatorMethodInfo . GetGenericArguments ( ) . Length == 2
166
- ? operatorMethodInfo . MakeGenericMethod ( t == null ? source . ElementType : t , typeof ( TResult ) )
167
- : operatorMethodInfo . MakeGenericMethod ( t == null ? source . ElementType : t ) ;
168
-
169
- var optimized = Expression . Call ( null , operatorMethodInfo , source . Expression , expression ) ;
170
- return source . Provider . Execute < TResult > ( optimized ) ;
171
- }
172
-
173
- static void Main ( string [ ] args )
174
- {
175
- var q = new [ ] { new NestedDto ( ) , new NestedDto { NestedDto2 = new NestedDto2 { Id = 42 } } } . AsQueryable ( ) ;
176
70
var r1 = q . Select ( "it != null && it.NestedDto2 != null ? it.NestedDto2.Id : null" ) ;
177
71
var list1 = r1 . ToDynamicList < int ? > ( ) ;
178
72
@@ -191,18 +85,6 @@ static void Main(string[] args)
191
85
Console . WriteLine ( projectedData . First ( ) . Name ) ;
192
86
Console . WriteLine ( projectedData . Last ( ) . Name ) ;
193
87
194
- IQueryable qry = GetQueryable ( ) ;
195
-
196
- var result = qry . Select ( "it" ) . OrderBy ( "Value" ) ;
197
- try
198
- {
199
- Console . WriteLine ( "result {0}" , JsonConvert . SerializeObject ( result , Formatting . Indented ) ) ;
200
- }
201
- catch ( Exception )
202
- {
203
- // Console.WriteLine(e);
204
- }
205
-
206
88
var all = new
207
89
{
208
90
test1 = new List < int > { 1 , 2 , 3 } . ToDynamicList ( typeof ( int ) ) ,
0 commit comments