annotate UnitTests/Linq/SelectManyTest.cs @ 6:11b6da379593

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