Mercurial > pub > bltoolkit
comparison UnitTests/Linq/SelectManyTest.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.Collections.Generic; | |
3 using System.Linq; | |
4 using System.Linq.Expressions; | |
5 | |
6 using BLToolkit.Data.DataProvider; | |
7 | |
8 using NUnit.Framework; | |
9 | |
10 namespace Data.Linq | |
11 { | |
12 using Model; | |
13 | |
14 [TestFixture] | |
15 public class SelectManyTest : TestBase | |
16 { | |
17 [Test] | |
18 public void Basic1() | |
19 { | |
20 ForEachProvider(db => AreEqual( | |
21 Parent.SelectMany(p => Child), | |
22 db.Parent.SelectMany(p => db.Child))); | |
23 } | |
24 | |
25 [Test] | |
26 public void Basic1_1() | |
27 { | |
28 ForEachProvider(db => AreEqual( | |
29 Parent.SelectMany(p => Child.SelectMany(t => GrandChild)), | |
30 db.Parent.SelectMany(p => db.Child.SelectMany(t => db.GrandChild)))); | |
31 } | |
32 | |
33 [Test] | |
34 public void Basic2() | |
35 { | |
36 ForEachProvider(db => AreEqual( | |
37 Parent.SelectMany(p => Child.Select(_ => _.ParentID + 1)), | |
38 db.Parent.SelectMany(p => db.Child.Select(_ => _.ParentID + 1)))); | |
39 } | |
40 | |
41 [Test] | |
42 public void Basic3() | |
43 { | |
44 ForEachProvider(db => AreEqual( | |
45 Parent.SelectMany(p => Child.Select(_ => _.ParentID + 1).Where(_ => _ > 1)), | |
46 db.Parent.SelectMany(p => db.Child.Select(_ => _.ParentID + 1).Where(_ => _ > 1)))); | |
47 } | |
48 | |
49 [Test] | |
50 public void Basic4() | |
51 { | |
52 ForEachProvider(db => AreEqual( | |
53 Parent.SelectMany(p => Child.Select(_ => _.ParentID + 1).Where(_ => p.ParentID == _)), | |
54 db.Parent.SelectMany(p => db.Child.Select(_ => _.ParentID + 1).Where(_ => p.ParentID == _)))); | |
55 } | |
56 | |
57 [Test] | |
58 public void Basic5() | |
59 { | |
60 ForEachProvider(new[] { ProviderName.Access }, db => AreEqual( | |
61 Child.SelectMany(t => t.Parent.GrandChildren), | |
62 db.Child.SelectMany(t => t.Parent.GrandChildren))); | |
63 } | |
64 | |
65 [Test] | |
66 public void Basic6() | |
67 { | |
68 ForEachProvider(db => AreEqual( | |
69 Parent.SelectMany(p => p.Children.Select(_ => _.ParentID + 1).Where(_ => _ > 1)), | |
70 db.Parent.SelectMany(p => p.Children.Select(_ => _.ParentID + 1).Where(_ => _ > 1)))); | |
71 } | |
72 | |
73 [Test] | |
74 public void Basic61() | |
75 { | |
76 ForEachProvider(db => AreEqual( | |
77 Parent.SelectMany(p => p.Children.Select(_ => _.ParentID + 1).Where(_ => _ > 1 || _ > 2)).Where(_ => _ > 0 || _ > 3), | |
78 db.Parent.SelectMany(p => p.Children.Select(_ => _.ParentID + 1).Where(_ => _ > 1 || _ > 2)).Where(_ => _ > 0 || _ > 3))); | |
79 } | |
80 | |
81 [Test] | |
82 public void Basic62() | |
83 { | |
84 ForEachProvider(new[] { ProviderName.Access }, | |
85 db => AreEqual( | |
86 Parent.SelectMany(p => p.Children.Select(_ => _.ParentID + p.ParentID).Where(_ => _ > 1)), | |
87 db.Parent.SelectMany(p => p.Children.Select(_ => _.ParentID + p.ParentID).Where(_ => _ > 1)))); | |
88 } | |
89 | |
90 [Test] | |
91 public void Basic7() | |
92 { | |
93 ForEachProvider(db => AreEqual( | |
94 Parent.SelectMany(p => p.Children), | |
95 db.Parent.SelectMany(p => p.Children))); | |
96 } | |
97 | |
98 [Test] | |
99 public void Basic8() | |
100 { | |
101 ForEachProvider(db => AreEqual( | |
102 Parent.SelectMany(p => p.Children.SelectMany(t => t.GrandChildren)), | |
103 db.Parent.SelectMany(p => p.Children.SelectMany(t => t.GrandChildren)))); | |
104 } | |
105 | |
106 [Test] | |
107 public void Basic9() | |
108 { | |
109 ForEachProvider(db => AreEqual( | |
110 Parent.SelectMany(p => p.Children.SelectMany(t => p.GrandChildren)), | |
111 db.Parent.SelectMany(p => p.Children.SelectMany(t => p.GrandChildren)))); | |
112 } | |
113 | |
114 [Test] | |
115 public void Basic10() | |
116 { | |
117 ForEachProvider(new[] { ProviderName.Access }, db => AreEqual( | |
118 Child.GroupBy(o => o.ParentID2).SelectMany(g => g.Select(o => o.Parent)), | |
119 db.Child.GroupBy(o => o.ParentID2).SelectMany(g => g.Select(o => o.Parent)))); | |
120 } | |
121 | |
122 [Test] | |
123 public void Basic11() | |
124 { | |
125 ForEachProvider(new[] { ProviderName.Access }, db => AreEqual( | |
126 Child | |
127 .GroupBy(o => o.ParentID2) | |
128 .SelectMany(g => g.Select(o => o.ParentID)), | |
129 db.Child | |
130 .GroupBy(o => o.ParentID2) | |
131 .SelectMany(g => db.Child.Where(o => o.ParentID2 == g.Key).Select(o => o.ParentID)))); | |
132 } | |
133 | |
134 [Test] | |
135 public void Test1() | |
136 { | |
137 TestJohn(db => | |
138 { | |
139 var q = db.Person.Select(p => p); | |
140 | |
141 return db.Person | |
142 .SelectMany(p1 => q, (p1, p2) => new { p1, p2 }) | |
143 .Where (t => t.p1.ID == t.p2.ID && t.p1.ID == 1) | |
144 .Select (t => new Person { ID = t.p1.ID, FirstName = t.p2.FirstName }); | |
145 }); | |
146 } | |
147 | |
148 [Test] | |
149 public void Test11() | |
150 { | |
151 TestJohn(db => db.Person | |
152 .SelectMany(p1 => db.Person.Select(p => p), (p1, p2) => new { p1, p2 }) | |
153 .Where (t => t.p1.ID == t.p2.ID && t.p1.ID == 1) | |
154 .Select (t => new Person { ID = t.p1.ID, FirstName = t.p2.FirstName })); | |
155 } | |
156 | |
157 [Test] | |
158 public void Test21() | |
159 { | |
160 TestJohn(db => | |
161 from p1 in from p in db.Person select new { ID1 = p.ID, p.LastName } | |
162 from p2 in from p in db.Person select new { ID2 = p.ID, p.FirstName } | |
163 from p3 in from p in db.Person select new { ID3 = p.ID, p.LastName } | |
164 where p1.ID1 == p2.ID2 && p1.LastName == p3.LastName && p1.ID1 == 1 | |
165 select new Person { ID = p1.ID1, FirstName = p2.FirstName, LastName = p3.LastName } ); | |
166 } | |
167 | |
168 [Test] | |
169 public void Test22() | |
170 { | |
171 TestJohn(db => | |
172 from p1 in from p in db.Person select p | |
173 from p2 in from p in db.Person select p | |
174 from p3 in from p in db.Person select p | |
175 where p1.ID == p2.ID && p1.LastName == p3.LastName && p1.ID == 1 | |
176 select new Person { ID = p1.ID, FirstName = p2.FirstName, LastName = p3.LastName } ); | |
177 } | |
178 | |
179 [Test] | |
180 public void Test31() | |
181 { | |
182 TestJohn(db => | |
183 from p in | |
184 from p in | |
185 from p in db.Person | |
186 where p.ID == 1 | |
187 select new { p, ID = p.ID + 1 } | |
188 where p.ID == 2 | |
189 select new { p, ID = p.ID + 1 } | |
190 where p.ID == 3 | |
191 select p.p.p); | |
192 } | |
193 | |
194 [Test] | |
195 public void Test32() | |
196 { | |
197 ForEachProvider(db => | |
198 { | |
199 var q = | |
200 from p in | |
201 from p in | |
202 from p in db.Person | |
203 where p.ID == 1 | |
204 select new { p, ID = p.ID + 1 } | |
205 where p.ID == 2 | |
206 select new { p, ID = p.ID + 1 } | |
207 where p.ID == 3 | |
208 select new { p.p.p }; | |
209 | |
210 var list = q.ToList(); | |
211 | |
212 Assert.AreEqual(1, list.Count); | |
213 | |
214 var person = list[0].p; | |
215 | |
216 Assert.AreEqual(1, person.ID); | |
217 Assert.AreEqual("John", person.FirstName); | |
218 }); | |
219 } | |
220 | |
221 [Test] | |
222 public void SubQuery1() | |
223 { | |
224 TestJohn(db => | |
225 { | |
226 var id = 1; | |
227 var q = from p in db.Person where p.ID == id select p; | |
228 | |
229 return | |
230 from p1 in db.Person | |
231 from p2 in q | |
232 where p1.ID == p2.ID | |
233 select new Person { ID = p1.ID, FirstName = p2.FirstName }; | |
234 }); | |
235 } | |
236 | |
237 public void SubQuery2(ITestDataContext db) | |
238 { | |
239 var q1 = from p in db.Person where p.ID == 1 || p.ID == 2 select p; | |
240 var q2 = from p in db.Person where !(p.ID == 2) select p; | |
241 | |
242 var q = | |
243 from p1 in q1 | |
244 from p2 in q2 | |
245 where p1.ID == p2.ID | |
246 select new Person { ID = p1.ID, FirstName = p2.FirstName }; | |
247 | |
248 foreach (var person in q) | |
249 { | |
250 Assert.AreEqual(1, person.ID); | |
251 Assert.AreEqual("John", person.FirstName); | |
252 } | |
253 } | |
254 | |
255 [Test] | |
256 public void SubQuery2() | |
257 { | |
258 ForEachProvider(db => | |
259 { | |
260 SubQuery2(db); | |
261 SubQuery2(db); | |
262 }); | |
263 } | |
264 | |
265 IQueryable<Person> GetPersonQuery(ITestDataContext db, int id) | |
266 { | |
267 return from p in db.Person where p.ID == id select new Person { ID = p.ID + 1, FirstName = p.FirstName }; | |
268 } | |
269 | |
270 [Test] | |
271 public void SubQuery3() | |
272 { | |
273 TestJohn(db => | |
274 { | |
275 var q = GetPersonQuery(db, 1); | |
276 | |
277 return | |
278 from p1 in db.Person | |
279 from p2 in q | |
280 where p1.ID == p2.ID - 1 | |
281 select new Person { ID = p1.ID, FirstName = p2.FirstName }; | |
282 }); | |
283 } | |
284 | |
285 [Test] | |
286 public void OneParam1() | |
287 { | |
288 TestJohn(db => db.Person.SelectMany(p => db.Person).Where(t => t.ID == 1).Select(t => t)); | |
289 } | |
290 | |
291 [Test] | |
292 public void OneParam2() | |
293 { | |
294 ForEachProvider(db => AreEqual( | |
295 Parent.SelectMany(p => p.Children).Where(t => t.ParentID == 1).Select(t => t), | |
296 db.Parent.SelectMany(p => p.Children).Where(t => t.ParentID == 1).Select(t => t))); | |
297 } | |
298 | |
299 [Test] | |
300 public void OneParam3() | |
301 { | |
302 ForEachProvider(new[] { ProviderName.Access }, db => AreEqual( | |
303 Child.SelectMany(p => p.Parent.GrandChildren).Where(t => t.ParentID == 1).Select(t => t), | |
304 db.Child.SelectMany(p => p.Parent.GrandChildren).Where(t => t.ParentID == 1).Select(t => t))); | |
305 } | |
306 | |
307 [Test] | |
308 public void ScalarQuery() | |
309 { | |
310 TestJohn(db => | |
311 from p1 in db.Person | |
312 from p2 in (from p in db.Person select p.ID) | |
313 where p1.ID == p2 | |
314 select new Person { ID = p2, FirstName = p1.FirstName } | |
315 ); | |
316 } | |
317 | |
318 [Test] | |
319 public void SelectManyLeftJoin1() | |
320 { | |
321 ForEachProvider(db => Assert.AreEqual( | |
322 (from p in Parent | |
323 from c in p.Children.Select(o => new { o.ChildID, p.ParentID }).DefaultIfEmpty() | |
324 select new { p.Value1, o = c }).Count(), | |
325 (from p in db.Parent | |
326 from c in p.Children.Select(o => new { o.ChildID, p.ParentID }).DefaultIfEmpty() | |
327 select new { p.Value1, o = c }).AsEnumerable().Count())); | |
328 } | |
329 | |
330 [Test] | |
331 public void SelectManyLeftJoin2() | |
332 { | |
333 ForEachProvider(db => AreEqual( | |
334 from p in Parent | |
335 from ch in (from c in Child where p.ParentID == c.ParentID select c).DefaultIfEmpty() | |
336 select ch, | |
337 from p in db.Parent | |
338 from ch in (from c in db.Child where p.ParentID == c.ParentID select c).DefaultIfEmpty() | |
339 select ch)); | |
340 } | |
341 | |
342 [Test] | |
343 public void SelectManyLeftJoin3() | |
344 { | |
345 ForEachProvider(new[] { ProviderName.Access }, db => AreEqual( | |
346 from p in Parent | |
347 from ch in Child.DefaultIfEmpty() | |
348 where p.ParentID == ch.ParentID | |
349 select ch, | |
350 from p in db.Parent | |
351 from ch in db.Child.DefaultIfEmpty() | |
352 where p.ParentID == ch.ParentID | |
353 select ch)); | |
354 } | |
355 | |
356 [Test] | |
357 public void SelectManyLeftJoin4() | |
358 { | |
359 ForEachProvider(db => AreEqual( | |
360 from p in Parent | |
361 from ch in (from c in Child where p.ParentID == c.ParentID select c).DefaultIfEmpty() | |
362 select new { p.ParentID, ch }, | |
363 from p in db.Parent | |
364 from ch in (from c in db.Child where p.ParentID == c.ParentID select c).DefaultIfEmpty() | |
365 select new { p.ParentID, ch })); | |
366 } | |
367 | |
368 [Test] | |
369 public void SelectManyLeftJoinCount() | |
370 { | |
371 var expected = | |
372 from p in Parent | |
373 from c in p.Children.Select(o => new { o.ChildID, p.ParentID }).DefaultIfEmpty() | |
374 select new { p.Value1, o = c }; | |
375 | |
376 ForEachProvider(db => Assert.AreEqual(expected.Count(), | |
377 (from p in db.Parent | |
378 from c in p.Children.Select(o => new { o.ChildID, p.ParentID }).DefaultIfEmpty() | |
379 select new { p.Value1, n = c.ChildID + 1, o = c }).Count())); | |
380 } | |
381 | |
382 [Test] | |
383 public void TestJoin1() | |
384 { | |
385 ForEachProvider(db => AreEqual( | |
386 from p in | |
387 from p in Parent | |
388 from g in p.GrandChildren | |
389 join c in Child on g.ChildID equals c.ChildID | |
390 join t in Types on c.ParentID equals t.ID | |
391 select c | |
392 join t in Person on p.ParentID equals t.ID | |
393 select p, | |
394 from p in | |
395 from p in db.Parent | |
396 from g in p.GrandChildren | |
397 join c in db.Child on g.ChildID equals c.ChildID | |
398 join t in db.Types on c.ParentID equals t.ID | |
399 select c | |
400 join t in db.Person on p.ParentID equals t.ID | |
401 select p)); | |
402 } | |
403 | |
404 [Test] | |
405 public void Test3() | |
406 { | |
407 ForEachProvider(new[] { ProviderName.Access }, db => Assert.AreEqual( | |
408 (from p in Parent | |
409 from g in p.GrandChildren | |
410 from t in Person | |
411 let c = g.Child | |
412 select c).Count(), | |
413 (from p in db.Parent | |
414 from g in p.GrandChildren | |
415 from t in db.Person | |
416 let c = g.Child | |
417 select c).Count())); | |
418 } | |
419 | |
420 [Test] | |
421 public void Test4() | |
422 { | |
423 ForEachProvider(db => Assert.AreEqual( | |
424 (from p in Parent | |
425 from g in p.GrandChildren | |
426 join c in db.Child on g.ChildID equals c.ChildID | |
427 join t in db.Types on c.ParentID equals t.ID | |
428 select c).Count(), | |
429 (from p in db.Parent | |
430 from g in p.GrandChildren | |
431 join c in db.Child on g.ChildID equals c.ChildID | |
432 join t in db.Types on c.ParentID equals t.ID | |
433 select c).Count())); | |
434 } | |
435 | |
436 [Test] | |
437 public void Test5() | |
438 { | |
439 ForEachProvider(new[] { ProviderName.Access }, db => | |
440 { | |
441 var q3 = | |
442 from p in db.Parent | |
443 from g in db.GrandChild | |
444 from c in db.Parent2 | |
445 select g.Child; | |
446 | |
447 q3.ToList(); | |
448 }); | |
449 } | |
450 | |
451 [Test] | |
452 public void Test6() | |
453 { | |
454 ForEachProvider(new[] { ProviderName.Access }, db => | |
455 { | |
456 var q3 = | |
457 from p in db.Parent | |
458 from g in db.GrandChild | |
459 from c in db.Parent2 | |
460 let r = g.Child | |
461 select g.Child; | |
462 | |
463 q3.ToList(); | |
464 }); | |
465 } | |
466 | |
467 [Test] | |
468 public void Test7() | |
469 { | |
470 ForEachProvider(new[] { ProviderName.Access }, db => AreEqual( | |
471 from p in db.Parent | |
472 from g in p.GrandChildren | |
473 from c in db.Parent2 | |
474 let r = g.Child | |
475 where p.ParentID == g.ParentID | |
476 select r, | |
477 from p in db.Parent | |
478 from g in p.GrandChildren | |
479 from c in db.Parent2 | |
480 let r = g.Child | |
481 where p.ParentID == g.ParentID | |
482 select r)); | |
483 } | |
484 | |
485 [Test] | |
486 public void Test8() | |
487 { | |
488 ForEachProvider(new[] { ProviderName.Access }, db => | |
489 { | |
490 var q2 = | |
491 from p in | |
492 from p in db.Parent | |
493 join c in db.GrandChild on p.ParentID equals c.ParentID | |
494 select p | |
495 from g in p.GrandChildren | |
496 from c in db.Parent2 | |
497 let r = g.Child | |
498 where | |
499 p.ParentID == g.ParentID | |
500 select r; | |
501 | |
502 q2.ToList(); | |
503 }); | |
504 } | |
505 | |
506 [Test] | |
507 public void Test81() | |
508 { | |
509 ForEachProvider(db => | |
510 { | |
511 var q2 = | |
512 from p in | |
513 from p in db.Parent | |
514 join c in db.GrandChild on p.ParentID equals c.ParentID | |
515 select p | |
516 from g in p.GrandChildren | |
517 //from c in db.Parent2 | |
518 let r = g.Child | |
519 where | |
520 p.ParentID == g.ParentID | |
521 select r; | |
522 | |
523 q2.ToList(); | |
524 }); | |
525 } | |
526 | |
527 [Test] | |
528 public void Test9() | |
529 { | |
530 ForEachProvider(new[] { ProviderName.Access }, db => | |
531 { | |
532 var q1 = db.Types.Where(_ => _.ID > 1).Where(_ => _.ID > 2); | |
533 | |
534 var q2 = | |
535 from p in db.Parent | |
536 join c in db.GrandChild on p.ParentID equals c.ParentID | |
537 join t in q1 on c.ParentID equals t.ID | |
538 where p.ParentID == 1 | |
539 select p; | |
540 | |
541 q2 = q2.Distinct().OrderBy(_ => _.ParentID); | |
542 | |
543 var q3 = | |
544 from p in q2 | |
545 from g in p.GrandChildren | |
546 from c in db.Parent2 | |
547 let r = g.Child | |
548 where | |
549 p.ParentID == g.ParentID && g.ParentID == c.ParentID | |
550 select r; | |
551 | |
552 q3 = q3.Where(_ => _.ChildID == 1); | |
553 | |
554 q3.ToList(); | |
555 }); | |
556 } | |
557 | |
558 [Test] | |
559 public void Test91() | |
560 { | |
561 ForEachProvider(new[] { ProviderName.Access }, db => | |
562 { | |
563 var q2 = | |
564 from p in db.Parent | |
565 join c in db.GrandChild on p.ParentID equals c.ParentID | |
566 where p.ParentID == 1 | |
567 select p; | |
568 | |
569 q2 = q2.Distinct(); | |
570 | |
571 var q3 = | |
572 from p in q2 | |
573 from g in p.GrandChildren | |
574 let r = g.Child | |
575 where | |
576 p.ParentID == g.ParentID | |
577 select r; | |
578 | |
579 q3.ToList(); | |
580 }); | |
581 } | |
582 | |
583 /////[Test] | |
584 public void Test92() | |
585 { | |
586 ForEachProvider(db => AreEqual( | |
587 db.Parent | |
588 .SelectMany(c => c.Children, (c, p) => new { c, p, }) | |
589 .Select(_ => new { _.c, p = new Child { ParentID = _.c.ParentID, ChildID = _.p.ChildID } }) | |
590 .SelectMany(ch => ch.p.GrandChildren, (ch, t) => new { t, ch }), | |
591 db.Parent | |
592 .SelectMany(c => c.Children, (c, p) => new { c, p, }) | |
593 .Select(_ => new { _.c, p = new Child { ParentID = _.c.ParentID, ChildID = _.p.ChildID } }) | |
594 .SelectMany(ch => ch.p.GrandChildren, (ch, t) => new { t, ch }))); | |
595 } | |
596 | |
597 [Test] | |
598 public void DoubleConntectionTest() | |
599 { | |
600 ForEachProvider(db => | |
601 { | |
602 var p1 = 1; | |
603 var p2 = 1; | |
604 | |
605 var q1 = db.Parent | |
606 .GroupJoin( | |
607 db.Child, | |
608 x => new { x.ParentID }, | |
609 y => new { y.ParentID }, | |
610 (x,y) => new { Parent = x, Child = y }) | |
611 .SelectMany( | |
612 y => y.Child.DefaultIfEmpty(), | |
613 (x,y) => new { x.Parent, Child = x.Child.FirstOrDefault() }) | |
614 .Where(x => x.Parent.Value1 > p1 && x.Parent.ParentID > p2) | |
615 .OrderBy(x => x.Parent.Value1); | |
616 | |
617 var q2 = | |
618 from x in db.Parent | |
619 join y in db.Child on new { x.ParentID } equals new { y.ParentID } into g | |
620 from y in g.DefaultIfEmpty() | |
621 where x.Value1 > p1 && x.ParentID > p2 | |
622 orderby x.Value1 | |
623 select new | |
624 { | |
625 x, y | |
626 }; | |
627 | |
628 var q3 = db.Parent | |
629 .GroupJoin( | |
630 db.Child, | |
631 x => new { x.ParentID }, | |
632 y => new { y.ParentID }, | |
633 (x,y) => new { Parent = x, Child = y }) | |
634 .SelectMany( | |
635 y => y.Child.DefaultIfEmpty(), | |
636 (x,y) => new { x.Parent, Child = y }) | |
637 .Where (x => x.Parent.Value1 > p1 && x.Parent.ParentID > p2) | |
638 .OrderBy(x => x.Parent.Value1) | |
639 /*.Select (x => new | |
640 { | |
641 x.Parent, | |
642 x.Child | |
643 })*/; | |
644 | |
645 var q4 = | |
646 from x in db.Parent | |
647 where x.Value1 > p1 && x.ParentID > p2 | |
648 orderby x.Value1 | |
649 select new | |
650 { | |
651 x, y = x.Children.FirstOrDefault() | |
652 }; | |
653 | |
654 foreach (var item in q1) | |
655 { | |
656 } | |
657 }); | |
658 } | |
659 | |
660 void Foo(Expression<Func<object[],object>> func) | |
661 { | |
662 /* | |
663 ParameterExpression ps; | |
664 Expression.Lambda<Func<object[],object>>( | |
665 Expression.Add( | |
666 Expression.Convert( | |
667 Expression.ArrayIndex( | |
668 ps = Expression.Parameter(typeof(object[]), "p"), | |
669 Expression.Constant(0, typeof(int))), | |
670 typeof(string)), | |
671 Expression.Convert( | |
672 Expression.Convert( | |
673 Expression.ArrayIndex( | |
674 ps, | |
675 Expression.Constant(1, typeof(int))), | |
676 typeof(int)), | |
677 typeof(object)), | |
678 (MethodInfo)methodof(string.Concat)), | |
679 new ParameterExpression[] { ps }); | |
680 */ | |
681 } | |
682 | |
683 Dictionary<string,string> _dic = new Dictionary<string,string>(); | |
684 | |
685 void Bar() | |
686 { | |
687 Foo(p => (string)p[0] + (int)p[1]); | |
688 } | |
689 | |
690 //[Test] | |
691 public void Test___() | |
692 { | |
693 Bar(); | |
694 } | |
695 } | |
696 } |