1+ using RoyalCode . SmartSelector . Tests . Models . FooBarBaz . Bazs ;
2+ using RoyalCode . SmartSelector . Tests . Models . FooBarBaz . Foos ;
3+ using System . Linq . Expressions ;
4+
5+ namespace RoyalCode . SmartSelector . Tests . Models . FooBarBaz . Base
6+ {
7+ public abstract class Base
8+ {
9+ public required int Id { get ; set ; }
10+ }
11+
12+ public class Derived : Base
13+ {
14+ public required string Name { get ; set ; }
15+ }
16+ }
17+
18+ namespace RoyalCode . SmartSelector . Tests . Models . FooBarBaz . Foos
19+ {
20+ using RoyalCode . SmartSelector . Tests . Models . FooBarBaz . Bars ;
21+ using RoyalCode . SmartSelector . Tests . Models . FooBarBaz . Base ;
22+
23+ public class Foo : Derived
24+ {
25+ public string Description1 { get ; set ; } = null ! ;
26+ public string Description2 { get ; set ; }
27+ public string ? Description3 { get ; set ; }
28+ public string ? Description4 { get ; set ; }
29+
30+ public int Value1 { get ; set ; }
31+ public int Value2 { get ; set ; }
32+ public int ? Value3 { get ; set ; }
33+ public int ? Value4 { get ; set ; }
34+
35+ public IReadOnlyCollection < Bar > Bars1 { get ; set ; } = null ! ;
36+ public IReadOnlyCollection < Bar > Bars2 { get ; set ; }
37+ public IReadOnlyCollection < Bar > ? Bars3 { get ; set ; }
38+ public IReadOnlyCollection < Bar > ? Bars4 { get ; set ; }
39+
40+ public IEnumerable < Baz > Bazs1 { get ; set ; } = null ! ;
41+ public IEnumerable < Baz > Bazs2 { get ; set ; }
42+ public IEnumerable < Baz > ? Bazs3 { get ; set ; }
43+ public IEnumerable < Baz > ? Bazs4 { get ; set ; }
44+ }
45+
46+ }
47+
48+ namespace RoyalCode . SmartSelector . Tests . Models . FooBarBaz . Bars
49+ {
50+ public class Bar
51+ {
52+ public Baz Baz1 { get ; set ; } = null ! ;
53+ public Baz Baz2 { get ; set ; } = null ! ;
54+ public Baz ? Baz3 { get ; set ; } = null ! ;
55+ public Baz ? Baz4 { get ; set ; } = null ! ;
56+ }
57+ }
58+
59+ namespace RoyalCode . SmartSelector . Tests . Models . FooBarBaz . Bazs
60+ {
61+ public class Baz
62+ {
63+ public BazType Type1 { get ; set ; }
64+ public BazType Type2 { get ; set ; }
65+ public BazType ? Type3 { get ; set ; }
66+ public BazType ? Type4 { get ; set ; }
67+
68+ public BazType Type5 { get ; set ; }
69+ public BazType Type6 { get ; set ; }
70+ public BazType ? Type7 { get ; set ; }
71+ public BazType ? Type8 { get ; set ; }
72+ }
73+
74+ public enum BazType
75+ {
76+ Type1 ,
77+ Type2 ,
78+ Type3
79+ }
80+ }
81+
82+ namespace RoyalCode . SmartSelector . Tests . Models . FooBarBaz . Dtos
83+ {
84+ using RoyalCode . SmartSelector . Tests . Models . FooBarBaz . Base ;
85+ using RoyalCode . SmartSelector . Tests . Models . FooBarBaz . Bazs ;
86+ using RoyalCode . SmartSelector . Tests . Models . FooBarBaz . Foos ;
87+
88+ [ AutoSelect < Foo > ]
89+ public partial class FooDto : Derived
90+ {
91+ public string Description1 { get ; set ; } = null ! ;
92+ public string ? Description2 { get ; set ; }
93+ public string Description3 { get ; set ; } = null ! ;
94+ public string ? Description4 { get ; set ; }
95+
96+ public int Value1 { get ; set ; }
97+ public int ? Value2 { get ; set ; }
98+ public int Value3 { get ; set ; }
99+ public int ? Value4 { get ; set ; }
100+
101+ public IReadOnlyCollection < BarDto > Bars1 { get ; set ; } = null ! ;
102+ public IReadOnlyCollection < BarDto > ? Bars2 { get ; set ; }
103+ public IReadOnlyCollection < BarDto > Bars3 { get ; set ; } = null ! ;
104+ public IReadOnlyCollection < BarDto > ? Bars4 { get ; set ; }
105+
106+ public IEnumerable < BazDto > Bazs1 { get ; set ; } = null ! ;
107+ public IEnumerable < BazDto > ? Bazs2 { get ; set ; }
108+ public IEnumerable < BazDto > Bazs3 { get ; set ; } = null ! ;
109+ public IEnumerable < BazDto > ? Bazs4 { get ; set ; }
110+ }
111+
112+ public class BarDto
113+ {
114+ public BazDto Baz1 { get ; set ; } = null ! ;
115+ public BazDto ? Baz2 { get ; set ; } = null ! ;
116+ public BazDto Baz3 { get ; set ; } = null ! ;
117+ public BazDto ? Baz4 { get ; set ; } = null ! ;
118+ }
119+
120+ public class BazDto
121+ {
122+ public BazType Type1 { get ; set ; }
123+ public BazType ? Type2 { get ; set ; }
124+ public BazType Type3 { get ; set ; }
125+ public BazType ? Type4 { get ; set ; }
126+
127+ public BazTypeDto Type5 { get ; set ; }
128+ public BazTypeDto ? Type6 { get ; set ; }
129+ public BazTypeDto Type7 { get ; set ; }
130+ public BazTypeDto ? Type8 { get ; set ; }
131+ }
132+
133+ public enum BazTypeDto
134+ {
135+ Type1 ,
136+ Type2 ,
137+ Type3
138+ }
139+ }
140+
141+ // expected partial class FooDto
142+
143+ namespace RoyalCode . SmartSelector . Tests . Models . FooBarBaz . Dtos
144+ {
145+ public partial class FooDto
146+ {
147+ private static Func < Foo , FooDto > selectFooFunc ;
148+
149+ public static Expression < Func < Foo , FooDto > > SelectEntityWithSubSelectsAndCollectionsExpression { get ; } = a => new FooDto
150+ {
151+ Id = a . Id ,
152+ Name = a . Name ,
153+ Description1 = a . Description1 ,
154+ Description2 = a . Description2 ,
155+ Description3 = a . Description3 ,
156+ Description4 = a . Description4 ,
157+ Value1 = a . Value1 ,
158+ Value2 = a . Value2 ,
159+ Value3 = a . Value3 . HasValue ? a . Value3 . Value : default ,
160+ Value4 = a . Value4 ,
161+ Bars1 = a . Bars1 . Select ( b => new BarDto
162+ {
163+ Baz1 = new BazDto
164+ {
165+ Type1 = b . Baz1 . Type1 ,
166+ Type2 = b . Baz1 . Type2 ,
167+ Type3 = b . Baz1 . Type3 . HasValue ? b . Baz1 . Type3 . Value : default ,
168+ Type4 = b . Baz1 . Type4 ,
169+ Type5 = ( BazTypeDto ) b . Baz1 . Type5 ,
170+ Type6 = ( BazTypeDto ? ) b . Baz1 . Type6 ,
171+ Type7 = ( BazTypeDto ) b . Baz1 . Type7 ,
172+ Type8 = ( BazTypeDto ? ) b . Baz1 . Type8
173+ } ,
174+ Baz2 = new BazDto
175+ {
176+ Type1 = b . Baz2 . Type1 ,
177+ Type2 = b . Baz2 . Type2 ,
178+ Type3 = b . Baz2 . Type3 . HasValue ? b . Baz2 . Type3 . Value : default ,
179+ Type4 = b . Baz2 . Type4 ,
180+ Type5 = ( BazTypeDto ) b . Baz2 . Type5 ,
181+ Type6 = ( BazTypeDto ? ) b . Baz2 . Type6 ,
182+ Type7 = ( BazTypeDto ) b . Baz2 . Type7 ,
183+ Type8 = ( BazTypeDto ? ) b . Baz2 . Type8
184+ } ,
185+ Baz3 = new BazDto
186+ {
187+ Type1 = b . Baz3 . Type1 ,
188+ Type2 = b . Baz3 . Type2 ,
189+ Type3 = b . Baz3 . Type3 . HasValue ? b . Baz3 . Type3 . Value : default ,
190+ Type4 = b . Baz3 . Type4 ,
191+ Type5 = ( BazTypeDto ) b . Baz3 . Type5 ,
192+ Type6 = ( BazTypeDto ? ) b . Baz3 . Type6 ,
193+ Type7 = ( BazTypeDto ) b . Baz3 . Type7 ,
194+ Type8 = ( BazTypeDto ? ) b . Baz3 . Type8
195+ } ,
196+ Baz4 = new BazDto
197+ {
198+ Type1 = b . Baz4 . Type1 ,
199+ Type2 = b . Baz4 . Type2 ,
200+ Type3 = b . Baz4 . Type3 . HasValue ? b . Baz4 . Type3 . Value : default ,
201+ Type4 = b . Baz4 . Type4 ,
202+ Type5 = ( BazTypeDto ) b . Baz4 . Type5 ,
203+ Type6 = ( BazTypeDto ? ) b . Baz4 . Type6 ,
204+ Type7 = ( BazTypeDto ) b . Baz4 . Type7 ,
205+ Type8 = ( BazTypeDto ? ) b . Baz4 . Type8
206+ }
207+ } ) . ToList ( ) ,
208+ Bars2 = a . Bars2 . Select ( b => new BarDto
209+ {
210+ Baz1 = new BazDto
211+ {
212+ Type1 = b . Baz1 . Type1 ,
213+ Type2 = b . Baz1 . Type2 ,
214+ Type3 = b . Baz1 . Type3 . HasValue ? b . Baz1 . Type3 . Value : default ,
215+ Type4 = b . Baz1 . Type4 ,
216+ Type5 = ( BazTypeDto ) b . Baz1 . Type5 ,
217+ Type6 = ( BazTypeDto ? ) b . Baz1 . Type6 ,
218+ Type7 = ( BazTypeDto ) b . Baz1 . Type7 ,
219+ Type8 = ( BazTypeDto ? ) b . Baz1 . Type8
220+ } ,
221+ Baz2 = new BazDto
222+ {
223+ Type1 = b . Baz2 . Type1 ,
224+ Type2 = b . Baz2 . Type2 ,
225+ Type3 = b . Baz2 . Type3 . HasValue ? b . Baz2 . Type3 . Value : default ,
226+ Type4 = b . Baz2 . Type4 ,
227+ Type5 = ( BazTypeDto ) b . Baz2 . Type5 ,
228+ Type6 = ( BazTypeDto ? ) b . Baz2 . Type6 ,
229+ Type7 = ( BazTypeDto ) b . Baz2 . Type7 ,
230+ Type8 = ( BazTypeDto ? ) b . Baz2 . Type8
231+ } ,
232+ Baz3 = new BazDto
233+ {
234+ Type1 = b . Baz3 . Type1 ,
235+ Type2 = b . Baz3 . Type2 ,
236+ Type3 = b . Baz3 . Type3 . HasValue ? b . Baz3 . Type3 . Value : default ,
237+ Type4 = b . Baz3 . Type4 ,
238+ Type5 = ( BazTypeDto ) b . Baz3 . Type5 ,
239+ Type6 = ( BazTypeDto ? ) b . Baz3 . Type6 ,
240+ Type7 = ( BazTypeDto ) b . Baz3 . Type7 ,
241+ Type8 = ( BazTypeDto ? ) b . Baz3 . Type8
242+ } ,
243+ Baz4 = new BazDto
244+ {
245+ Type1 = b . Baz4 . Type1 ,
246+ Type2 = b . Baz4 . Type2 ,
247+ Type3 = b . Baz4 . Type3 . HasValue ? b . Baz4 . Type3 . Value : default ,
248+ Type4 = b . Baz4 . Type4 ,
249+ Type5 = ( BazTypeDto ) b . Baz4 . Type5 ,
250+ Type6 = ( BazTypeDto ? ) b . Baz4 . Type6 ,
251+ Type7 = ( BazTypeDto ) b . Baz4 . Type7 ,
252+ Type8 = ( BazTypeDto ? ) b . Baz4 . Type8
253+ }
254+ } ) . ToList ( ) ,
255+ Bars3 = a . Bars3 . Select ( b => new BarDto
256+ {
257+ Baz1 = new BazDto
258+ {
259+ Type1 = b . Baz1 . Type1 ,
260+ Type2 = b . Baz1 . Type2 ,
261+ Type3 = b . Baz1 . Type3 . HasValue ? b . Baz1 . Type3 . Value : default ,
262+ Type4 = b . Baz1 . Type4 ,
263+ Type5 = ( BazTypeDto ) b . Baz1 . Type5 ,
264+ Type6 = ( BazTypeDto ? ) b . Baz1 . Type6 ,
265+ Type7 = ( BazTypeDto ) b . Baz1 . Type7 ,
266+ Type8 = ( BazTypeDto ? ) b . Baz1 . Type8
267+ } ,
268+ Baz2 = new BazDto
269+ {
270+ Type1 = b . Baz2 . Type1 ,
271+ Type2 = b . Baz2 . Type2 ,
272+ Type3 = b . Baz2 . Type3 . HasValue ? b . Baz2 . Type3 . Value : default ,
273+ Type4 = b . Baz2 . Type4 ,
274+ Type5 = ( BazTypeDto ) b . Baz2 . Type5 ,
275+ Type6 = ( BazTypeDto ? ) b . Baz2 . Type6 ,
276+ Type7 = ( BazTypeDto ) b . Baz2 . Type7 ,
277+ Type8 = ( BazTypeDto ? ) b . Baz2 . Type8
278+ } ,
279+ Baz3 = new BazDto
280+ {
281+ Type1 = b . Baz3 . Type1 ,
282+ Type2 = b . Baz3 . Type2 ,
283+ Type3 = b . Baz3 . Type3 . HasValue ? b . Baz3 . Type3 . Value : default ,
284+ Type4 = b . Baz3 . Type4 ,
285+ Type5 = ( BazTypeDto ) b . Baz3 . Type5 ,
286+ Type6 = ( BazTypeDto ? ) b . Baz3 . Type6 ,
287+ Type7 = ( BazTypeDto ) b . Baz3 . Type7 ,
288+ Type8 = ( BazTypeDto ? ) b . Baz3 . Type8
289+ } ,
290+ Baz4 = new BazDto
291+ {
292+ Type1 = b . Baz4 . Type1 ,
293+ Type2 = b . Baz4 . Type2 ,
294+ Type3 = b . Baz4 . Type3 . HasValue ? b . Baz4 . Type3 . Value : default ,
295+ Type4 = b . Baz4 . Type4 ,
296+ Type5 = ( BazTypeDto ) b . Baz4 . Type5 ,
297+ Type6 = ( BazTypeDto ? ) b . Baz4 . Type6 ,
298+ Type7 = ( BazTypeDto ) b . Baz4 . Type7 ,
299+ Type8 = ( BazTypeDto ? ) b . Baz4 . Type8
300+ }
301+ } ) . ToList ( ) ,
302+ Bars4 = a . Bars4 . Select ( b => new BarDto
303+ {
304+ Baz1 = new BazDto
305+ {
306+ Type1 = b . Baz1 . Type1 ,
307+ Type2 = b . Baz1 . Type2 ,
308+ Type3 = b . Baz1 . Type3 . HasValue ? b . Baz1 . Type3 . Value : default ,
309+ Type4 = b . Baz1 . Type4 ,
310+ Type5 = ( BazTypeDto ) b . Baz1 . Type5 ,
311+ Type6 = ( BazTypeDto ? ) b . Baz1 . Type6 ,
312+ Type7 = ( BazTypeDto ) b . Baz1 . Type7 ,
313+ Type8 = ( BazTypeDto ? ) b . Baz1 . Type8
314+ } ,
315+ Baz2 = new BazDto
316+ {
317+ Type1 = b . Baz2 . Type1 ,
318+ Type2 = b . Baz2 . Type2 ,
319+ Type3 = b . Baz2 . Type3 . HasValue ? b . Baz2 . Type3 . Value : default ,
320+ Type4 = b . Baz2 . Type4 ,
321+ Type5 = ( BazTypeDto ) b . Baz2 . Type5 ,
322+ Type6 = ( BazTypeDto ? ) b . Baz2 . Type6 ,
323+ Type7 = ( BazTypeDto ) b . Baz2 . Type7 ,
324+ Type8 = ( BazTypeDto ? ) b . Baz2 . Type8
325+ } ,
326+ Baz3 = new BazDto
327+ {
328+ Type1 = b . Baz3 . Type1 ,
329+ Type2 = b . Baz3 . Type2 ,
330+ Type3 = b . Baz3 . Type3 . HasValue ? b . Baz3 . Type3 . Value : default ,
331+ Type4 = b . Baz3 . Type4 ,
332+ Type5 = ( BazTypeDto ) b . Baz3 . Type5 ,
333+ Type6 = ( BazTypeDto ? ) b . Baz3 . Type6 ,
334+ Type7 = ( BazTypeDto ) b . Baz3 . Type7 ,
335+ Type8 = ( BazTypeDto ? ) b . Baz3 . Type8
336+ } ,
337+ Baz4 = new BazDto
338+ {
339+ Type1 = b . Baz4 . Type1 ,
340+ Type2 = b . Baz4 . Type2 ,
341+ Type3 = b . Baz4 . Type3 . HasValue ? b . Baz4 . Type3 . Value : default ,
342+ Type4 = b . Baz4 . Type4 ,
343+ Type5 = ( BazTypeDto ) b . Baz4 . Type5 ,
344+ Type6 = ( BazTypeDto ? ) b . Baz4 . Type6 ,
345+ Type7 = ( BazTypeDto ) b . Baz4 . Type7 ,
346+ Type8 = ( BazTypeDto ? ) b . Baz4 . Type8
347+ }
348+ } ) . ToList ( )
349+ } ;
350+ }
351+ }
0 commit comments