annotate UnitTests/Linq/JoinTest.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.Linq;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
4 using BLToolkit.Data.DataProvider;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
5 using BLToolkit.Data.Linq;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
6 using BLToolkit.DataAccess;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
7 using BLToolkit.Mapping;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
8
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
9 using NUnit.Framework;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
10
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
11 namespace Data.Linq
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
12 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
13 using Model;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
14
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
15 [TestFixture]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
16 public class JoinTest : TestBase
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
17 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
18 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
19 public void InnerJoin1()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
20 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
21 TestJohn(db =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
22 from p1 in db.Person
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
23 join p2 in db.Person on p1.ID equals p2.ID
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
24 where p1.ID == 1
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
25 select new Person { ID = p1.ID, FirstName = p2.FirstName });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
26 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
27
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
28 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
29 public void InnerJoin2()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
30 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
31 TestJohn(db =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
32 from p1 in db.Person
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
33 join p2 in db.Person on new { p1.ID, p1.FirstName } equals new { p2.ID, p2.FirstName }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
34 where p1.ID == 1
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
35 select new Person { ID = p1.ID, FirstName = p2.FirstName });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
36 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
37
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
38 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
39 public void InnerJoin3()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
40 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
41 TestJohn(db =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
42 from p1 in db.Person
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
43 join p2 in
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
44 from p2 in db.Person join p3 in db.Person on new { p2.ID, p2.LastName } equals new { p3.ID, p3.LastName } select new { p2, p3 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
45 on new { p1.ID, p1.FirstName } equals new { p2.p2.ID, p2.p2.FirstName }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
46 where p1.ID == 1
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
47 select new Person { ID = p1.ID, FirstName = p2.p2.FirstName, LastName = p2.p3.LastName });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
48 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
49
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
50 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
51 public void InnerJoin4()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
52 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
53 TestJohn(db =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
54 from p1 in db.Person
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
55 join p2 in db.Person on new { p1.ID, p1.FirstName } equals new { p2.ID, p2.FirstName }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
56 join p3 in db.Person on new { p2.ID, p2.LastName } equals new { p3.ID, p3.LastName }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
57 where p1.ID == 1
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
58 select new Person { ID = p1.ID, FirstName = p2.FirstName, LastName = p3.LastName });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
59 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
60
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
61 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
62 public void InnerJoin5()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
63 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
64 TestJohn(db =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
65 from p1 in db.Person
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
66 join p2 in db.Person on new { p1.ID, p1.FirstName } equals new { p2.ID, p2.FirstName }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
67 join p3 in db.Person on new { p1.ID, p2.LastName } equals new { p3.ID, p3.LastName }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
68 where p1.ID == 1
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
69 select new Person { ID = p1.ID, FirstName = p2.FirstName, LastName = p3.LastName });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
70 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
71
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
72 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
73 public void InnerJoin6()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
74 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
75 TestJohn(db =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
76 from p1 in db.Person
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
77 join p2 in from p3 in db.Person select new { ID = p3.ID + 1, p3.FirstName } on p1.ID equals p2.ID - 1
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
78 where p1.ID == 1
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
79 select new Person { ID = p1.ID, FirstName = p2.FirstName });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
80 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
81
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
82 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
83 public void InnerJoin7()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
84 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
85 var expected =
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
86 from t in
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
87 from ch in Child
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
88 join p in Parent on ch.ParentID equals p.ParentID
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
89 select ch.ParentID + p.ParentID
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
90 where t > 2
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
91 select t;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
92
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
93 ForEachProvider(db => AreEqual(expected,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
94 from t in
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
95 from ch in db.Child
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
96 join p in db.Parent on ch.ParentID equals p.ParentID
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
97 select ch.ParentID + p.ParentID
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
98 where t > 2
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
99 select t));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
100 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
101
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
102 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
103 public void InnerJoin8()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
104 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
105 ForEachProvider(db => AreEqual(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
106 from t in
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
107 from ch in Child
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
108 join p in Parent on ch.ParentID equals p.ParentID
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
109 select new { ID = ch.ParentID + p.ParentID }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
110 where t.ID > 2
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
111 select t,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
112 from t in
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
113 from ch in db.Child
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
114 join p in db.Parent on ch.ParentID equals p.ParentID
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
115 select new { ID = ch.ParentID + p.ParentID }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
116 where t.ID > 2
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
117 select t));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
118 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
119
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
120 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
121 public void InnerJoin9()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
122 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
123 ForEachProvider(new[] { ProviderName.Access }, db => AreEqual(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
124 from g in GrandChild
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
125 join p in Parent4 on g.Child.ParentID equals p.ParentID
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
126 where g.ParentID < 10 && p.Value1 == TypeValue.Value3
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
127 select g,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
128 from g in db.GrandChild
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
129 join p in db.Parent4 on g.Child.ParentID equals p.ParentID
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
130 where g.ParentID < 10 && p.Value1 == TypeValue.Value3
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
131 select g));
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 InnerJoin10()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
136 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
137 ForEachProvider(db => AreEqual(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
138 from p in Parent
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
139 join g in GrandChild on p.ParentID equals g.ParentID into q
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
140 from q1 in q
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
141 select new { p.ParentID, q1.GrandChildID },
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
142 from p in db.Parent
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
143 join g in db.GrandChild on p.ParentID equals g.ParentID into q
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
144 from q1 in q
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
145 select new { p.ParentID, q1.GrandChildID }));
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 GroupJoin1()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
150 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
151 ForEachProvider(db => AreEqual(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
152 from p in Parent
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
153 join ch in Child on p.ParentID equals ch.ParentID into lj1
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
154 where p.ParentID == 1
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
155 select p,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
156 from p in db.Parent
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
157 join ch in db.Child on p.ParentID equals ch.ParentID into lj1
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
158 where p.ParentID == 1
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
159 select p));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
160 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
161
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
162 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
163 public void GroupJoin2()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
164 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
165 ForEachProvider(db =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
166 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
167 var q =
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
168 from p in db.Parent
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
169 join c in db.Child on p.ParentID equals c.ParentID into lj
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
170 where p.ParentID == 1
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
171 select new { p, lj };
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
172
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
173 var list = q.ToList();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
174
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
175 Assert.AreEqual(1, list.Count);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
176 Assert.AreEqual(1, list[0].p.ParentID);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
177 Assert.AreEqual(1, list[0].lj.Count());
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
178
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
179 var ch = list[0].lj.ToList();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
180
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
181 Assert.AreEqual( 1, ch[0].ParentID);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
182 Assert.AreEqual(11, ch[0].ChildID);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
183 });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
184 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
185
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
186 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
187 public void GroupJoin3()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
188 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
189 var q1 = Parent
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
190 .GroupJoin(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
191 Child,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
192 p => p.ParentID,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
193 ch => ch.ParentID,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
194 (p, lj1) => new { p, lj1 = new { lj1 } }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
195 )
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
196 .Where (t => t.p.ParentID == 2)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
197 .Select(t => new { t.p, t.lj1 });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
198
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
199 var list1 = q1.ToList();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
200
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
201 ForEachProvider(db =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
202 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
203 var q2 = db.Parent
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
204 .GroupJoin(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
205 db.Child,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
206 p => p.ParentID,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
207 ch => ch.ParentID,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
208 (p, lj1) => new { p, lj1 = new { lj1 } }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
209 )
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
210 .Where (t => t.p.ParentID == 2)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
211 .Select(t => new { t.p, t.lj1 });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
212
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
213 var list2 = q2.ToList();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
214
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
215 Assert.AreEqual(list1.Count, list2.Count);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
216 Assert.AreEqual(list1[0].p.ParentID, list2[0].p.ParentID);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
217 Assert.AreEqual(list1[0].lj1.lj1.Count(), list2[0].lj1.lj1.Count());
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 GroupJoin4()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
223 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
224 var q1 =
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
225 from p in Parent
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
226 join ch in
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
227 from c in Child select new { c.ParentID, c.ChildID }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
228 on p.ParentID equals ch.ParentID into lj1
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
229 where p.ParentID == 3
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
230 select new { p, lj1 };
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
231
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
232 var list1 = q1.ToList();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
233
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
234 ForEachProvider(db =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
235 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
236 var q2 =
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
237 from p in db.Parent
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
238 join ch in
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
239 from c in db.Child select new { c.ParentID, c.ChildID }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
240 on p.ParentID equals ch.ParentID into lj1
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
241 where p.ParentID == 3
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
242 select new { p, lj1 };
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
243
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
244 var list2 = q2.ToList();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
245
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
246 Assert.AreEqual(list1.Count, list2.Count);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
247 Assert.AreEqual(list1[0].p.ParentID, list2[0].p.ParentID);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
248 Assert.AreEqual(list1[0].lj1.Count(), list2[0].lj1.Count());
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
249 });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
250 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
251
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
252 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
253 public void GroupJoin5()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
254 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
255 ForEachProvider(db => AreEqual(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
256 from p in Parent
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
257 join ch in Child on p.ParentID equals ch.ParentID into lj1
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
258 where p.ParentID == 1
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
259 select lj1.First(),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
260 from p in db.Parent
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
261 join ch in db.Child on p.ParentID equals ch.ParentID into lj1
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
262 where p.ParentID == 1
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
263 select lj1.First()));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
264 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
265
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
266 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
267 public void GroupJoin51()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
268 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
269 var expected =
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
270 (
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
271 from p in Parent
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
272 join ch in Child on p.ParentID equals ch.ParentID into lj1
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
273 where p.ParentID == 1
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
274 select new { p1 = lj1, p2 = lj1.First() }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
275 ).ToList();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
276
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
277 ForEachProvider(db =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
278 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
279 var result =
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
280 (
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
281 from p in db.Parent
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
282 join ch in db.Child on p.ParentID equals ch.ParentID into lj1
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
283 where p.ParentID == 1
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
284 select new { p1 = lj1, p2 = lj1.First() }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
285 ).ToList();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
286
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
287 Assert.AreEqual(expected.Count, result.Count);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
288 AreEqual(expected[0].p1, result[0].p1);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
289 });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
290 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
291
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
292 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
293 public void GroupJoin52()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
294 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
295 ForEachProvider(db => AreEqual(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
296 from p in Parent
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
297 join ch in Child on p.ParentID equals ch.ParentID into lj1
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
298 where p.ParentID == 1
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
299 select lj1.First().ParentID,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
300 from p in db.Parent
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
301 join ch in db.Child on p.ParentID equals ch.ParentID into lj1
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
302 where p.ParentID == 1
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
303 select lj1.First().ParentID));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
304 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
305
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
306 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
307 public void GroupJoin53()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
308 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
309 ForEachProvider(db => AreEqual(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
310 from p in Parent
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
311 join ch in Child on p.ParentID equals ch.ParentID into lj1
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
312 where p.ParentID == 1
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
313 select lj1.Select(_ => _.ParentID).First(),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
314 from p in db.Parent
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
315 join ch in db.Child on p.ParentID equals ch.ParentID into lj1
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
316 where p.ParentID == 1
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
317 select lj1.Select(_ => _.ParentID).First()));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
318 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
319
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
320 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
321 public void GroupJoin54()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
322 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
323 ForEachProvider(db => AreEqual(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
324 from p in Parent
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
325 join ch in Child on p.ParentID equals ch.ParentID into lj1
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
326 where p.ParentID == 1
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
327 select new { p1 = lj1.Count(), p2 = lj1.First() },
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
328 from p in db.Parent
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
329 join ch in db.Child on p.ParentID equals ch.ParentID into lj1
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
330 where p.ParentID == 1
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
331 select new { p1 = lj1.Count(), p2 = lj1.First() }));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
332 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
333
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
334 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
335 public void GroupJoin6()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
336 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
337 var n = 1;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
338
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
339 var q1 =
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
340 from p in Parent
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
341 join c in Child on p.ParentID + n equals c.ParentID into lj
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
342 where p.ParentID == 1
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
343 select new { p, lj };
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
344
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
345 var list1 = q1.ToList();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
346 var ch1 = list1[0].lj.ToList();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
347
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
348 ForEachProvider(db =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
349 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
350 var q2 =
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
351 from p in db.Parent
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
352 join c in db.Child on p.ParentID + n equals c.ParentID into lj
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
353 where p.ParentID == 1
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
354 select new { p, lj };
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
355
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
356 var list2 = q2.ToList();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
357
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
358 Assert.AreEqual(list1.Count, list2.Count);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
359 Assert.AreEqual(list1[0].p.ParentID, list2[0].p.ParentID);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
360 Assert.AreEqual(list1[0].lj.Count(), list2[0].lj.Count());
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
361
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
362 var ch2 = list2[0].lj.ToList();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
363
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
364 Assert.AreEqual(ch1[0].ParentID, ch2[0].ParentID);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
365 Assert.AreEqual(ch1[0].ChildID, ch2[0].ChildID);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
366 });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
367 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
368
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
369 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
370 public void GroupJoin7()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
371 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
372 var n = 1;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
373
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
374 var q1 =
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
375 from p in Parent
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
376 join c in Child on new { id = p.ParentID } equals new { id = c.ParentID - n } into j
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
377 where p.ParentID == 1
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
378 select new { p, j };
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
379
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
380 var list1 = q1.ToList();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
381 var ch1 = list1[0].j.ToList();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
382
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
383 ForEachProvider(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
384 new[] { ProviderName.Firebird },
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
385 db =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
386 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
387 var q2 =
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
388 from p in db.Parent
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
389 join c in db.Child on new { id = p.ParentID } equals new { id = c.ParentID - n } into j
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
390 where p.ParentID == 1
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
391 select new { p, j };
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
392
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
393 var list2 = q2.ToList();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
394
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
395 Assert.AreEqual(list1.Count, list2.Count);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
396 Assert.AreEqual(list1[0].p.ParentID, list2[0].p.ParentID);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
397 Assert.AreEqual(list1[0].j.Count(), list2[0].j.Count());
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
398
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
399 var ch2 = list2[0].j.ToList();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
400
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
401 Assert.AreEqual(ch1[0].ParentID, ch2[0].ParentID);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
402 Assert.AreEqual(ch1[0].ChildID, ch2[0].ChildID);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
403 });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
404 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
405
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
406 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
407 public void GroupJoin8()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
408 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
409 ForEachProvider(db => AreEqual(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
410 from p in Parent
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
411 join c in Child on p.ParentID equals c.ParentID into g
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
412 select new
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
413 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
414 Child = g.FirstOrDefault()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
415 },
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
416 from p in db.Parent
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
417 join c in db.Child on p.ParentID equals c.ParentID into g
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
418 select new
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
419 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
420 Child = g.FirstOrDefault()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
421 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
422 ));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
423 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
424
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
425 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
426 public void GroupJoin9()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
427 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
428 ForEachProvider(db => AreEqual(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
429 Parent
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
430 .GroupJoin(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
431 Parent,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
432 x => new { Id = x.ParentID },
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
433 y => new { Id = y.ParentID },
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
434 (xid, yid) => new { xid, yid }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
435 )
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
436 .SelectMany(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
437 y => y.yid.DefaultIfEmpty(),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
438 (x1, y) => new { x1.xid, y }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
439 )
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
440 .GroupJoin(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
441 Parent,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
442 x => new { Id = x.xid.ParentID },
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
443 y => new { Id = y.ParentID },
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
444 (x2, y) => new { x2.xid, x2.y, h = y }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
445 )
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
446 .SelectMany(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
447 a => a.h.DefaultIfEmpty(),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
448 (x3, a) => new { x3.xid, x3.y, a }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
449 )
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
450 .GroupJoin(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
451 Parent,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
452 x => new { Id = x.xid.ParentID },
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
453 y => new { Id = y.ParentID },
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
454 (x4, y) => new { x4.xid, x4.y, x4.a, p = y }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
455 )
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
456 .SelectMany(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
457 z => z.p.DefaultIfEmpty(),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
458 (x5, z) => new { x5.xid, z, x5.y, x5.a }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
459 )
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
460 .GroupJoin(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
461 Parent,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
462 x => new { Id = x.xid.ParentID },
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
463 y => new { Id = y.Value1 ?? 1 },
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
464 (x6, y) => new { x6.xid, xy = x6.y, x6.a, x6.z, y }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
465 )
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
466 .SelectMany(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
467 z => z.y.DefaultIfEmpty(),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
468 (x7, z) => new { x7.xid, z, x7.xy, x7.a, xz = x7.z }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
469 )
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
470 .GroupJoin(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
471 Parent,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
472 x => new { Id = x.xid.ParentID },
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
473 y => new { Id = y.ParentID },
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
474 (x8, y) => new { x8.xid, x8.z, x8.xy, x8.a, x8.xz, y }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
475 )
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
476 .SelectMany(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
477 a => a.y.DefaultIfEmpty(),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
478 (x9, a) => new { x9.xid, x9.z, x9.xy, xa = x9.a, x9.xz, a }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
479 ),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
480 db.Parent
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
481 .GroupJoin(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
482 db.Parent,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
483 x => new { Id = x.ParentID },
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
484 y => new { Id = y.ParentID },
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
485 (xid, yid) => new { xid, yid }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
486 )
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
487 .SelectMany(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
488 y => y.yid.DefaultIfEmpty(),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
489 (x1, y) => new { x1.xid, y }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
490 )
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
491 .GroupJoin(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
492 db.Parent,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
493 x => new { Id = x.xid.ParentID },
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
494 y => new { Id = y.ParentID },
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
495 (x2, y) => new { x2.xid, x2.y, h = y }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
496 )
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
497 .SelectMany(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
498 a => a.h.DefaultIfEmpty(),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
499 (x3, a) => new { x3.xid, x3.y, a }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
500 )
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
501 .GroupJoin(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
502 db.Parent,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
503 x => new { Id = x.xid.ParentID },
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
504 y => new { Id = y.ParentID },
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
505 (x4, y) => new { x4.xid, x4.y, x4.a, p = y }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
506 )
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
507 .SelectMany(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
508 z => z.p.DefaultIfEmpty(),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
509 (x5, z) => new { x5.xid, z, x5.y, x5.a }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
510 )
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
511 .GroupJoin(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
512 db.Parent,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
513 x => new { Id = x.xid.ParentID },
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
514 y => new { Id = y.Value1 ?? 1 },
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
515 (x6, y) => new { x6.xid, xy = x6.y, x6.a, x6.z, y }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
516 )
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
517 .SelectMany(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
518 z => z.y.DefaultIfEmpty(),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
519 (x7, z) => new { x7.xid, z, x7.xy, x7.a, xz = x7.z }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
520 )
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
521 .GroupJoin(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
522 db.Parent,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
523 x => new { Id = x.xid.ParentID },
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
524 y => new { Id = y.ParentID },
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
525 (x8, y) => new { x8.xid, x8.z, x8.xy, x8.a, x8.xz, y }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
526 )
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
527 .SelectMany(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
528 a => a.y.DefaultIfEmpty(),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
529 (x9, a) => new { x9.xid, x9.z, x9.xy, xa = x9.a, x9.xz, a }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
530 )));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
531 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
532
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
533 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
534 public void LeftJoin1()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
535 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
536 var expected =
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
537 from p in Parent
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
538 join ch in Child on p.ParentID equals ch.ParentID into lj1
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
539 from ch in lj1.DefaultIfEmpty()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
540 where p.ParentID >= 4
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
541 select new { p, ch };
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
542
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
543 ForEachProvider(db => AreEqual(expected,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
544 from p in db.Parent
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
545 join ch in db.Child on p.ParentID equals ch.ParentID into lj1
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
546 from ch in lj1.DefaultIfEmpty()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
547 where p.ParentID >= 4
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
548 select new { p, ch }));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
549 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
550
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
551 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
552 public void LeftJoin2()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
553 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
554 ForEachProvider(db => AreEqual(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
555 from p in Parent
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
556 join ch in Child on p.ParentID equals ch.ParentID into lj1
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
557 from ch in lj1.DefaultIfEmpty()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
558 select new { p, ch },
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
559 from p in db.Parent
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
560 join ch in db.Child on p.ParentID equals ch.ParentID into lj1
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
561 from ch in lj1.DefaultIfEmpty()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
562 select new { p, ch }));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
563 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
564
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
565 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
566 public void LeftJoin3()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
567 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
568 ForEachProvider(db => AreEqual(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
569 from c in Child select c.Parent,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
570 from c in db.Child select c.Parent));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
571 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
572
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
573 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
574 public void LeftJoin4()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
575 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
576 ForEachProvider(db => AreEqual(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
577 Parent
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
578 .GroupJoin(Child,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
579 x => new { x.ParentID, x.Value1 },
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
580 y => new { y.ParentID, Value1 = (int?)y.ParentID },
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
581 (x, y) => new { Parent = x, Child = y })
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
582 .SelectMany(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
583 y => y.Child.DefaultIfEmpty(),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
584 (x, y) => new { x.Parent, Child = x.Child.FirstOrDefault() })
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
585 .Where(x => x.Parent.ParentID == 1 && x.Parent.Value1 != null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
586 .OrderBy(x => x.Parent.ParentID),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
587 db.Parent
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
588 .GroupJoin(db.Child,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
589 x => new { x.ParentID, x.Value1 },
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
590 y => new { y.ParentID, Value1 = (int?)y.ParentID },
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
591 (x, y) => new { Parent = x, Child = y })
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
592 .SelectMany(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
593 y => y.Child.DefaultIfEmpty(),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
594 (x, y) => new { x.Parent, Child = x.Child.FirstOrDefault() })
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
595 .Where(x => x.Parent.ParentID == 1 && x.Parent.Value1 != null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
596 .OrderBy(x => x.Parent.ParentID)));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
597 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
598
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
599 public enum EnumInt
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
600 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
601 [MapValue(1)] One
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
602 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
603
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
604 [TableName("Child")]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
605 public class EnumChild
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
606 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
607 public int ParentID;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
608 public EnumInt ChildID;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
609 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
610
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
611 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
612 public void LeftJoin5()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
613 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
614 ForEachProvider(db =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
615 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
616 var q =
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
617 from p in db.Parent
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
618 join ch in new Table<EnumChild>(db) on p.ParentID equals ch.ParentID into lj1
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
619 from ch in lj1.DefaultIfEmpty()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
620 where ch == null
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
621 select new { p, ch };
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
622
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
623 var list = q.ToList();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
624 list.ToString();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
625 });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
626 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
627
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
628 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
629 public void SubQueryJoin()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
630 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
631 var expected =
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
632 from p in Parent
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
633 join ch in
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
634 from c in Child
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
635 where c.ParentID > 0
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
636 select new { c.ParentID, c.ChildID }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
637 on p.ParentID equals ch.ParentID into lj1
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
638 from ch in lj1.DefaultIfEmpty()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
639 select p;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
640
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
641 ForEachProvider(db => AreEqual(expected,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
642 from p in db.Parent
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
643 join ch in
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
644 from c in db.Child
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
645 where c.ParentID > 0
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
646 select new { c.ParentID, c.ChildID }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
647 on p.ParentID equals ch.ParentID into lj1
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
648 from ch in lj1.DefaultIfEmpty()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
649 select p));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
650 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
651
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
652 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
653 public void ReferenceJoin1()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
654 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
655 ForEachProvider(new[] { ProviderName.Access }, db => AreEqual(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
656 from c in Child join g in GrandChild on c equals g.Child select new { c.ParentID, g.GrandChildID },
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
657 from c in db.Child join g in db.GrandChild on c equals g.Child select new { c.ParentID, g.GrandChildID }));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
658 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
659
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
660 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
661 public void ReferenceJoin2()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
662 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
663 ForEachProvider(new[] { ProviderName.Access }, db => AreEqual(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
664 from g in GrandChild
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
665 join c in Child on g.Child equals c
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
666 select new { c.ParentID, g.GrandChildID },
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
667 from g in db.GrandChild
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
668 join c in db.Child on g.Child equals c
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
669 select new { c.ParentID, g.GrandChildID }));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
670 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
671
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
672 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
673 public void JoinByAnonymousTest()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
674 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
675 ForEachProvider(new[] { ProviderName.Access }, db => AreEqual(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
676 from p in Parent
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
677 join c in Child on new { Parent = p, p.ParentID } equals new { c.Parent, c.ParentID }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
678 select new { p.ParentID, c.ChildID },
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
679 from p in db.Parent
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
680 join c in db.Child on new { Parent = p, p.ParentID } equals new { c.Parent, c.ParentID }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
681 select new { p.ParentID, c.ChildID }));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
682 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
683
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
684 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
685 public void FourTableJoin()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
686 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
687 ForEachProvider(db => AreEqual(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
688 from p in Parent
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
689 join c1 in Child on p.ParentID equals c1.ParentID
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
690 join c2 in GrandChild on c1.ParentID equals c2.ParentID
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
691 join c3 in GrandChild on c2.ParentID equals c3.ParentID
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
692 select new { p, c1Key = c1.ChildID, c2Key = c2.GrandChildID, c3Key = c3.GrandChildID },
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
693 from p in db.Parent
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
694 join c1 in db.Child on p.ParentID equals c1.ParentID
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
695 join c2 in db.GrandChild on c1.ParentID equals c2.ParentID
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
696 join c3 in db.GrandChild on c2.ParentID equals c3.ParentID
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
697 select new { p, c1Key = c1.ChildID, c2Key = c2.GrandChildID, c3Key = c3.GrandChildID }));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
698 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
699
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
700 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
701 public void ProjectionTest1()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
702 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
703 ForEachProvider(db => AreEqual(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
704 from p1 in Person
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
705 join p2 in Person on p1.ID equals p2.ID
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
706 select new { ID1 = new { Value = p1.ID }, FirstName2 = p2.FirstName, } into p1
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
707 select p1.ID1.Value,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
708 from p1 in db.Person
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
709 join p2 in db.Person on p1.ID equals p2.ID
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
710 select new { ID1 = new { Value = p1.ID }, FirstName2 = p2.FirstName, } into p1
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
711 select p1.ID1.Value));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
712 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
713
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
714 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
715 public void LeftJoinTest()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
716 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
717 // Reproduces the problem described here: http://rsdn.ru/forum/prj.rfd/4221837.flat.aspx
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
718 ForEachProvider(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
719 //Providers.Select(p => p.Name).Except(new[] { ProviderName.SQLite }).ToArray(),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
720 db =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
721 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
722 var q =
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
723 from p1 in db.Person
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
724 join p2 in db.Person on p1.ID equals p2.ID into g
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
725 from p2 in g.DefaultIfEmpty() // yes I know the join will always succeed and it'll never be null, but just for test's sake :)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
726 select new { p1, p2 };
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
727
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
728 var list = q.ToList(); // NotImplementedException? :(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
729 Assert.That(list, Is.Not.Empty);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
730 });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
731 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
732
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
733 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
734 public void LeftJoinTest2()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
735 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
736 // THIS TEST MUST BE RUN IN RELEASE CONFIGURATION (BECAUSE IT PASSES UNDER DEBUG CONFIGURATION)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
737 // Reproduces the problem described here: http://rsdn.ru/forum/prj.rfd/4221837.flat.aspx
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
738
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
739 ForEachProvider(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
740 Providers.Select(p => p.Name).Except(new[] { ProviderName.SQLite }).ToArray(),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
741 db =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
742 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
743 var q =
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
744 from p1 in db.Patient
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
745 join p2 in db.Patient on p1.Diagnosis equals p2.Diagnosis into g
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
746 from p2 in g.DefaultIfEmpty() // yes I know the join will always succeed and it'll never be null, but just for test's sake :)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
747 join p3 in db.Person on p2.PersonID equals p3.ID
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
748 select new { p1, p2, p3 };
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
749
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
750 var arr = q.ToArray(); // NotImplementedException? :(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
751 Assert.That(arr, Is.Not.Empty);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
752 });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
753 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
754
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
755 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
756 public void StackOverflow([IncludeDataContexts("Sql2008", "Sql2012")] string context)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
757 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
758 using (var db = new TestDbManager(context))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
759 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
760 var q =
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
761 from c in db.Child
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
762 join p in db.Parent on c.ParentID equals p.ParentID
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
763 select new { p, c };
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
764
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
765 for (var i = 0; i < 100; i++)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
766 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
767 q =
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
768 from c in q
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
769 join p in db.Parent on c.p.ParentID equals p.ParentID
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
770 select new { p, c.c };
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
771 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
772
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
773 var list = q.ToList();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
774 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
775 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
776
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
777 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
778 public void ApplyJoin([IncludeDataContexts("Sql2008")] string context)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
779 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
780 using (var db = new TestDbManager(context))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
781 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
782 var q =
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
783 from ch in db.Child
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
784 from p in new Model.Functions(db).GetParentByID(ch.Parent.ParentID)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
785 select p;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
786
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
787 q.ToList();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
788 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
789 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
790
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
791 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
792 public void Issue257([DataContexts] string context)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
793 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
794 using (var db = GetDataContext(context))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
795 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
796 var q =
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
797 from m in db.Types
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
798 join p in db.Parent on m.ID equals p.ParentID
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
799 group m by new
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
800 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
801 m.DateTimeValue.Date
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
802 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
803 into b
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
804 select new
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
805 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
806 QualiStatusByDate = b.Key,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
807 Count = b.Count()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
808 };
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
809
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
810 q.ToList();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
811 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
812 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
813 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
814 }