Mercurial > pub > bltoolkit
comparison UnitTests/Linq/ConvertExpression.cs @ 0:f990fcb411a9
Копия текущей версии из github
author | cin |
---|---|
date | Thu, 27 Mar 2014 21:46:09 +0400 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:f990fcb411a9 |
---|---|
1 using System; | |
2 using System.Linq; | |
3 | |
4 using BLToolkit.Data.DataProvider; | |
5 | |
6 using NUnit.Framework; | |
7 | |
8 namespace Data.Linq | |
9 { | |
10 [TestFixture] | |
11 public class ConvertExpression : TestBase | |
12 { | |
13 [Test] | |
14 public void Select1() | |
15 { | |
16 ForEachProvider(db => AreEqual( | |
17 from p in Parent | |
18 let children = p.Children.Where(c => c.ParentID > 1) | |
19 select children.Sum(c => c.ChildID), | |
20 from p in db.Parent | |
21 let children = p.Children.Where(c => c.ParentID > 1) | |
22 select children.Sum(c => c.ChildID))); | |
23 } | |
24 | |
25 [Test] | |
26 public void Select2() | |
27 { | |
28 ForEachProvider(db => AreEqual( | |
29 from p in Parent | |
30 let children1 = p.Children.Where(c => c.ParentID > 1) | |
31 let children2 = children1.Where(c => c.ParentID < 10) | |
32 select children2.Sum(c => c.ChildID), | |
33 from p in db.Parent | |
34 let children1 = p.Children.Where(c => c.ParentID > 1) | |
35 let children2 = children1.Where(c => c.ParentID < 10) | |
36 select children2.Sum(c => c.ChildID))); | |
37 } | |
38 | |
39 [Test] | |
40 public void Select3() | |
41 { | |
42 ForEachProvider(db => AreEqual( | |
43 Parent | |
44 .Select(p => new { children1 = p.Children. Where(c => c.ParentID > 1) }) | |
45 .Select(t => new { children2 = t.children1.Where(c => c.ParentID < 10) }) | |
46 .Select(t => t.children2.Sum(c => c.ChildID)), | |
47 db.Parent | |
48 .Select(p => new { children1 = p.Children. Where(c => c.ParentID > 1) }) | |
49 .Select(t => new { children2 = t.children1.Where(c => c.ParentID < 10) }) | |
50 .Select(t => t.children2.Sum(c => c.ChildID)))); | |
51 } | |
52 | |
53 [Test] | |
54 public void Select4() | |
55 { | |
56 ForEachProvider(db => AreEqual( | |
57 Parent | |
58 .Select(p => p.Children. Where(c => c.ParentID > 1)) | |
59 .Select(t => t.Where(c => c.ParentID < 10)) | |
60 .Select(t => t.Sum(c => c.ChildID)), | |
61 db.Parent | |
62 .Select(p => p.Children. Where(c => c.ParentID > 1)) | |
63 .Select(t => t.Where(c => c.ParentID < 10)) | |
64 .Select(t => t.Sum(c => c.ChildID)))); | |
65 } | |
66 | |
67 [Test] | |
68 public void Where1() | |
69 { | |
70 ForEachProvider(db => AreEqual( | |
71 from p in Parent | |
72 let children1 = p.Children.Where(c => c.ParentID > 1) | |
73 let children2 = children1.Where(c => c.ParentID < 10) | |
74 where children1.Any() | |
75 select children2.Sum(c => c.ChildID), | |
76 from p in db.Parent | |
77 let children1 = p.Children.Where(c => c.ParentID > 1) | |
78 let children2 = children1.Where(c => c.ParentID < 10) | |
79 where children1.Any() | |
80 select children2.Sum(c => c.ChildID))); | |
81 } | |
82 | |
83 [Test] | |
84 public void Where2() | |
85 { | |
86 ForEachProvider(db => AreEqual( | |
87 from p in Parent | |
88 let children1 = p.Children.Where(c => c.ParentID > 1) | |
89 where children1.Any() | |
90 let children2 = children1.Where(c => c.ParentID < 10) | |
91 select children2.Sum(c => c.ChildID), | |
92 from p in db.Parent | |
93 let children1 = p.Children.Where(c => c.ParentID > 1) | |
94 where children1.Any() | |
95 let children2 = children1.Where(c => c.ParentID < 10) | |
96 select children2.Sum(c => c.ChildID))); | |
97 } | |
98 | |
99 [Test] | |
100 public void Where3() | |
101 { | |
102 ForEachProvider(db => AreEqual( | |
103 from p in Parent | |
104 let children1 = p.Children.Where(c => c.ParentID > 1) | |
105 let children2 = children1.Where(c => c.ParentID < 10) | |
106 where children2.Any() | |
107 select children2.Sum(c => c.ChildID), | |
108 from p in db.Parent | |
109 let children1 = p.Children.Where(c => c.ParentID > 1) | |
110 let children2 = children1.Where(c => c.ParentID < 10) | |
111 where children2.Any() | |
112 select children2.Sum(c => c.ChildID))); | |
113 } | |
114 | |
115 //[Test] | |
116 public void Where4() | |
117 { | |
118 ForEachProvider(db => AreEqual( | |
119 Parent | |
120 .Select(p => new { p, children1 = p.Children. Where(c => c.ParentID > 1) }) | |
121 .Where (t => t.children1.Any()), | |
122 db.Parent | |
123 .Select(p => new { p, children1 = p.Children. Where(c => c.ParentID > 1) }) | |
124 .Where (t => t.children1.Any()))); | |
125 } | |
126 | |
127 //[Test] | |
128 public void Where5() | |
129 { | |
130 ForEachProvider(db => AreEqual( | |
131 Parent | |
132 .Select(p => new { children1 = p.Children. Where(c => c.ParentID > 1) }) | |
133 .Where (t => t.children1.Any()), | |
134 db.Parent | |
135 .Select(p => new { children1 = p.Children. Where(c => c.ParentID > 1) }) | |
136 .Where (t => t.children1.Any()))); | |
137 } | |
138 | |
139 //[Test] | |
140 public void Where6() | |
141 { | |
142 ForEachProvider(db => AreEqual( | |
143 Parent | |
144 .Select(p => p.Children. Where(c => c.ParentID > 1)) | |
145 .Where (t => t.Any()), | |
146 db.Parent | |
147 .Select(p => p.Children. Where(c => c.ParentID > 1)) | |
148 .Where (t => t.Any()))); | |
149 } | |
150 | |
151 [Test] | |
152 public void Any1() | |
153 { | |
154 ForEachProvider(db => Assert.AreEqual( | |
155 Parent | |
156 .Select(p => new { p, children1 = p.Children.Where(c => c.ParentID > 1) }) | |
157 .Any(p => p.children1.Any()), | |
158 db.Parent | |
159 .Select(p => new { p, children1 = p.Children.Where(c => c.ParentID > 1) }) | |
160 .Any(p => p.children1.Any()))); | |
161 } | |
162 | |
163 [Test] | |
164 public void Any2() | |
165 { | |
166 ForEachProvider(db => Assert.AreEqual( | |
167 Parent | |
168 .Select(p => p.Children.Where(c => c.ParentID > 1)) | |
169 .Any(p => p.Any()), | |
170 db.Parent | |
171 .Select(p => p.Children.Where(c => c.ParentID > 1)) | |
172 .Any(p => p.Any()))); | |
173 } | |
174 | |
175 [Test] | |
176 public void Any3() | |
177 { | |
178 ForEachProvider(db => Assert.AreEqual( | |
179 Parent | |
180 .Select(p => new { p, children1 = p.Children.Where(c => c.ParentID > 1) }) | |
181 .Where(p => p.children1.Any()) | |
182 .Any(), | |
183 db.Parent | |
184 .Select(p => new { p, children1 = p.Children.Where(c => c.ParentID > 1) }) | |
185 .Where(p => p.children1.Any()) | |
186 .Any())); | |
187 } | |
188 | |
189 //[Test] | |
190 public void Any4() | |
191 { | |
192 ForEachProvider(db => Assert.AreEqual( | |
193 Parent | |
194 .Select(p => new { children1 = p.Children.Where(c => c.ParentID > 1) }) | |
195 .Where(p => p.children1.Any()) | |
196 .Any(), | |
197 db.Parent | |
198 .Select(p => new { children1 = p.Children.Where(c => c.ParentID > 1) }) | |
199 .Where(p => p.children1.Any()) | |
200 .Any())); | |
201 } | |
202 | |
203 | |
204 [Test] | |
205 public void LetTest1([DataContexts(ProviderName.SqlCe, ProviderName.Informix, ProviderName.Sybase)] string context) | |
206 { | |
207 using (var db = GetDataContext(context)) | |
208 AreEqual( | |
209 from p in Parent | |
210 let ch = p.Children | |
211 where ch.FirstOrDefault() != null | |
212 select ch.FirstOrDefault().ParentID | |
213 , | |
214 from p in db.Parent | |
215 let ch = p.Children | |
216 where ch.FirstOrDefault() != null | |
217 select ch.FirstOrDefault().ParentID); | |
218 } | |
219 | |
220 [Test] | |
221 public void LetTest2() | |
222 { | |
223 ForEachProvider( | |
224 new[] { ProviderName.SqlCe, ProviderName.Informix, ProviderName.Sybase }, | |
225 db => AreEqual( | |
226 from p in Parent | |
227 let ch = p.Children | |
228 where ch.FirstOrDefault() != null | |
229 select p | |
230 , | |
231 from p in db.Parent | |
232 let ch = p.Children | |
233 where ch.FirstOrDefault() != null | |
234 select p)); | |
235 } | |
236 | |
237 [Test] | |
238 public void LetTest3() | |
239 { | |
240 ForEachProvider( | |
241 new[] { ProviderName.Informix, ProviderName.Sybase }, | |
242 db => AreEqual( | |
243 from p in Parent | |
244 let ch = Child | |
245 select ch.FirstOrDefault().ParentID | |
246 , | |
247 from p in db.Parent | |
248 let ch = db.Child | |
249 select ch.FirstOrDefault().ParentID)); | |
250 } | |
251 | |
252 [Test] | |
253 public void LetTest4() | |
254 { | |
255 BLToolkit.Common.Configuration.Linq.AllowMultipleQuery = true; | |
256 | |
257 ForEachProvider( | |
258 new[] { ProviderName.Informix, ProviderName.Sybase }, | |
259 db => AreEqual( | |
260 from p in Parent | |
261 let ch1 = Child.Where(c => c.ParentID == p.ParentID) | |
262 let ch2 = ch1.Where(c => c.ChildID > -100) | |
263 select new | |
264 { | |
265 Any = ch2.Any(), | |
266 Count = ch2.Count(), | |
267 First1 = ch2.FirstOrDefault(c => c.ParentID > 0), | |
268 First2 = ch2.FirstOrDefault() | |
269 } | |
270 , | |
271 from p in db.Parent | |
272 let ch1 = db.Child.Where(c => c.ParentID == p.ParentID) | |
273 let ch2 = ch1.Where(c => c.ChildID > -100) | |
274 select new | |
275 { | |
276 Any = ch2.Any(), | |
277 Count = ch2.Count(), | |
278 First1 = ch2.FirstOrDefault(c => c.ParentID > 0), | |
279 First2 = ch2.FirstOrDefault() | |
280 })); | |
281 | |
282 BLToolkit.Common.Configuration.Linq.AllowMultipleQuery = false; | |
283 } | |
284 | |
285 [Test] | |
286 public void LetTest5() | |
287 { | |
288 BLToolkit.Common.Configuration.Linq.AllowMultipleQuery = true; | |
289 | |
290 ForEachProvider( | |
291 new[] { ProviderName.Informix, ProviderName.Sybase }, | |
292 db => AreEqual( | |
293 from p in Parent | |
294 let ch1 = Child.Where(c => c.ParentID == p.ParentID) | |
295 let ch2 = ch1.Where(c => c.ChildID > -100) | |
296 select new | |
297 { | |
298 Any = ch2.Any(), | |
299 Count = ch2.Count(), | |
300 First1 = ch2.FirstOrDefault(c => c.ParentID > 0) == null ? 0 : ch2.FirstOrDefault(c => c.ParentID > 0).ParentID, | |
301 First2 = ch2.FirstOrDefault() | |
302 } | |
303 , | |
304 from p in db.Parent | |
305 let ch1 = db.Child.Where(c => c.ParentID == p.ParentID) | |
306 let ch2 = ch1.Where(c => c.ChildID > -100) | |
307 select new | |
308 { | |
309 Any = ch2.Any(), | |
310 Count = ch2.Count(), | |
311 First1 = ch2.FirstOrDefault(c => c.ParentID > 0).ParentID, | |
312 First2 = ch2.FirstOrDefault() | |
313 })); | |
314 | |
315 BLToolkit.Common.Configuration.Linq.AllowMultipleQuery = false; | |
316 } | |
317 | |
318 [Test] | |
319 public void LetTest6() | |
320 { | |
321 BLToolkit.Common.Configuration.Linq.AllowMultipleQuery = true; | |
322 //BLToolkit.Common.Configuration.Linq.GenerateExpressionTest = true; | |
323 | |
324 ForEachProvider( | |
325 new[] { ProviderName.Informix, ProviderName.Sybase }, | |
326 db => AreEqual( | |
327 ( | |
328 from p in Parent | |
329 let ch1 = Child.Where(c => c.ParentID == p.ParentID) | |
330 let ch2 = ch1.Where(c => c.ChildID > -100) | |
331 select new | |
332 { | |
333 p.ParentID, | |
334 Any = ch2.Any(), | |
335 Count = ch2.Count(), | |
336 First1 = ch2.FirstOrDefault(c => c.ParentID > 0) == null ? 0 : ch2.FirstOrDefault(c => c.ParentID > 0).ParentID, | |
337 First2 = ch2.FirstOrDefault() | |
338 } | |
339 ).Where(t => t.ParentID > 0) | |
340 , | |
341 ( | |
342 from p in db.Parent | |
343 let ch1 = db.Child.Where(c => c.ParentID == p.ParentID) | |
344 let ch2 = ch1.Where(c => c.ChildID > -100) | |
345 select new | |
346 { | |
347 p.ParentID, | |
348 Any = ch2.Any(), | |
349 Count = ch2.Count(), | |
350 First1 = ch2.FirstOrDefault(c => c.ParentID > 0).ParentID, | |
351 First2 = ch2.FirstOrDefault() | |
352 } | |
353 ).Where(t => t.ParentID > 0))); | |
354 | |
355 BLToolkit.Common.Configuration.Linq.AllowMultipleQuery = false; | |
356 } | |
357 | |
358 [Test] | |
359 public void LetTest7() | |
360 { | |
361 BLToolkit.Common.Configuration.Linq.AllowMultipleQuery = true; | |
362 | |
363 ForEachProvider( | |
364 new[] { ProviderName.Informix, ProviderName.Sybase }, | |
365 db => AreEqual( | |
366 ( | |
367 from p in Parent | |
368 let ch1 = Child.Where(c => c.ParentID == p.ParentID) | |
369 let ch2 = ch1.Where(c => c.ChildID > -100) | |
370 select new | |
371 { | |
372 p.ParentID, | |
373 Any = ch2.Any(), | |
374 Count = ch2.Count(), | |
375 First1 = ch2.FirstOrDefault(c => c.ParentID > 0) == null ? 0 : ch2.FirstOrDefault(c => c.ParentID > 0).ParentID, | |
376 First2 = ch2.FirstOrDefault() | |
377 } | |
378 ).Where(t => t.ParentID > 0).Take(5000) | |
379 , | |
380 ( | |
381 from p in db.Parent | |
382 let ch1 = db.Child.Where(c => c.ParentID == p.ParentID) | |
383 let ch2 = ch1.Where(c => c.ChildID > -100) | |
384 select new | |
385 { | |
386 p.ParentID, | |
387 Any = ch2.Any(), | |
388 Count = ch2.Count(), | |
389 First1 = ch2.FirstOrDefault(c => c.ParentID > 0).ParentID, | |
390 First2 = ch2.FirstOrDefault() | |
391 } | |
392 ).Where(t => t.ParentID > 0).Take(5000))); | |
393 | |
394 BLToolkit.Common.Configuration.Linq.AllowMultipleQuery = false; | |
395 } | |
396 | |
397 [Test] | |
398 public void LetTest8() | |
399 { | |
400 BLToolkit.Common.Configuration.Linq.AllowMultipleQuery = true; | |
401 | |
402 ForEachProvider( | |
403 db => AreEqual( | |
404 from p in Parent | |
405 let ch1 = Child.Where(c => c.ParentID == p.ParentID) | |
406 let ch2 = ch1.Where(c => c.ChildID > -100) | |
407 let ch3 = ch2.FirstOrDefault(c => c.ParentID > 0) | |
408 select new | |
409 { | |
410 First1 = ch3 == null ? 0 : ch3.ParentID, | |
411 Any = ch2.Any(), | |
412 Count = ch2.Count(), | |
413 First2 = ch2.FirstOrDefault() | |
414 } | |
415 , | |
416 from p in db.Parent | |
417 let ch1 = db.Child.Where(c => c.ParentID == p.ParentID) | |
418 let ch2 = ch1.Where(c => c.ChildID > -100) | |
419 let ch3 = ch2.FirstOrDefault(c => c.ParentID > 0) | |
420 select new | |
421 { | |
422 First1 = ch3 == null ? 0 : ch3.ParentID, | |
423 Any = ch2.Any(), | |
424 Count = ch2.Count(), | |
425 First2 = ch2.FirstOrDefault() | |
426 })); | |
427 | |
428 BLToolkit.Common.Configuration.Linq.AllowMultipleQuery = false; | |
429 } | |
430 | |
431 [Test] | |
432 public void LetTest9() | |
433 { | |
434 BLToolkit.Common.Configuration.Linq.AllowMultipleQuery = true; | |
435 | |
436 ForEachProvider( | |
437 db => AreEqual( | |
438 ( | |
439 from p in Parent | |
440 let ch1 = Child.Where(c => c.ParentID == p.ParentID) | |
441 select new | |
442 { | |
443 First = ch1.FirstOrDefault() | |
444 } | |
445 ).Take(10) | |
446 , | |
447 ( | |
448 from p in db.Parent | |
449 let ch1 = db.Child.Where(c => c.ParentID == p.ParentID) | |
450 select new | |
451 { | |
452 First = ch1.FirstOrDefault() | |
453 } | |
454 ).Take(10))); | |
455 | |
456 BLToolkit.Common.Configuration.Linq.AllowMultipleQuery = false; | |
457 } | |
458 | |
459 [Test] | |
460 public void LetTest10() | |
461 { | |
462 BLToolkit.Common.Configuration.Linq.AllowMultipleQuery = true; | |
463 | |
464 ForEachProvider( | |
465 db => Assert.AreEqual( | |
466 ( | |
467 from p in Parent | |
468 let ch1 = Child.Where(c => c.ParentID == p.ParentID) | |
469 select new | |
470 { | |
471 First = ch1.FirstOrDefault() | |
472 } | |
473 ).Any() | |
474 , | |
475 ( | |
476 from p in db.Parent | |
477 let ch1 = db.Child.Where(c => c.ParentID == p.ParentID) | |
478 select new | |
479 { | |
480 First = ch1.FirstOrDefault() | |
481 } | |
482 ).Any())); | |
483 | |
484 BLToolkit.Common.Configuration.Linq.AllowMultipleQuery = false; | |
485 } | |
486 | |
487 [Test] | |
488 public void LetTest11([DataContexts] string context) | |
489 { | |
490 BLToolkit.Common.Configuration.Linq.AllowMultipleQuery = true; | |
491 | |
492 using (var db = GetDataContext(context)) | |
493 AreEqual( | |
494 from p in Parent | |
495 let ch1 = Child.FirstOrDefault(c => c.ParentID > 0) | |
496 let ch2 = Child.Where(c => c.ChildID > -100) | |
497 select new | |
498 { | |
499 First1 = ch1 == null ? 0 : ch1.ParentID, | |
500 First2 = ch2.FirstOrDefault() | |
501 } | |
502 , | |
503 from p in db.Parent | |
504 let ch1 = db.Child.FirstOrDefault(c => c.ParentID > 0) | |
505 let ch2 = Child.Where(c => c.ChildID > -100) | |
506 select new | |
507 { | |
508 First1 = ch1 == null ? 0 : ch1.ParentID, | |
509 First2 = ch2.FirstOrDefault() | |
510 }); | |
511 | |
512 BLToolkit.Common.Configuration.Linq.AllowMultipleQuery = false; | |
513 } | |
514 } | |
515 } |