annotate UnitTests/Linq/GroupByTest.cs @ 5:f7d63a092920

Исправлено условие Where в тех случаях, когда репозитарий не является генериком
author cin
date Tue, 10 Mar 2015 16:02:11 +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 NUnit.Framework;
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 namespace Data.Linq
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
9 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
10 using Model;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
11
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
12 [TestFixture]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
13 public class GroupByTest : TestBase
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
14 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
15 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
16 public void Simple1()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
17 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
18 BLToolkit.Common.Configuration.Linq.PreloadGroups = true;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
19
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
20 ForEachProvider(db =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
21 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
22 var q =
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
23 from ch in db.Child
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
24 group ch by ch.ParentID;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
25
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
26 var list = q.ToList().Where(n => n.Key < 6).OrderBy(n => n.Key).ToList();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
27
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
28 Assert.AreEqual(4, list.Count);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
29
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
30 for (var i = 0; i < list.Count; i++)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
31 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
32 var values = list[i].OrderBy(c => c.ChildID).ToList();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
33
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
34 Assert.AreEqual(i + 1, list[i].Key);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
35 Assert.AreEqual(i + 1, values.Count);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
36
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
37 for (var j = 0; j < values.Count; j++)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
38 Assert.AreEqual((i + 1) * 10 + j + 1, values[j].ChildID);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
39 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
40 });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
41 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
42
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
43 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
44 public void Simple2()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
45 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
46 BLToolkit.Common.Configuration.Linq.PreloadGroups = false;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
47
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
48 ForEachProvider(db =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
49 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
50 var q =
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
51 from ch in db.GrandChild
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
52 group ch by new { ch.ParentID, ch.ChildID };
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
53
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
54 var list = q.ToList();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
55
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
56 Assert.AreEqual (8, list.Count);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
57 Assert.AreNotEqual(0, list.OrderBy(c => c.Key.ParentID).First().ToList().Count);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
58 });
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 Simple3()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
63 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
64 ForEachProvider(db =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
65 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
66 var q =
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
67 from ch in db.Child
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
68 group ch by ch.ParentID into g
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
69 select g.Key;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
70
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
71 var list = q.ToList().Where(n => n < 6).OrderBy(n => n).ToList();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
72
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
73 Assert.AreEqual(4, list.Count);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
74 for (var i = 0; i < list.Count; i++) Assert.AreEqual(i + 1, list[i]);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
75 });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
76 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
77
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
78 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
79 public void Simple4()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
80 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
81 ForEachProvider(db =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
82 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
83 var q =
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
84 from ch in db.Child
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
85 group ch by ch.ParentID into g
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
86 orderby g.Key
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
87 select g.Key;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
88
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
89 var list = q.ToList().Where(n => n < 6).ToList();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
90
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
91 Assert.AreEqual(4, list.Count);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
92 for (var i = 0; i < list.Count; i++) Assert.AreEqual(i + 1, list[i]);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
93 });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
94 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
95
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
96 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
97 public void Simple5()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
98 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
99 var expected =
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
100 from ch in GrandChild
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
101 group ch by new { ch.ParentID, ch.ChildID } into g
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
102 group g by new { g.Key.ParentID } into g
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
103 select g.Key;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
104
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
105 ForEachProvider(db => AreEqual(expected,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
106 from ch in db.GrandChild
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
107 group ch by new { ch.ParentID, ch.ChildID } into g
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
108 group g by new { g.Key.ParentID } into g
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
109 select g.Key));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
110 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
111
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
112 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
113 public void Simple6()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
114 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
115 ForEachProvider(db =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
116 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
117 var q = db.GrandChild.GroupBy(ch => new { ch.ParentID, ch.ChildID }, ch => ch.GrandChildID);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
118 var list = q.ToList();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
119
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
120 Assert.AreNotEqual(0, list[0].Count());
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
121 Assert.AreEqual (8, list.Count);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
122 });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
123 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
124
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
125 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
126 public void Simple7()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
127 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
128 ForEachProvider(db =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
129 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
130 var q = db.GrandChild
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
131 .GroupBy(ch => new { ch.ParentID, ch.ChildID }, ch => ch.GrandChildID)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
132 .Select (gr => new { gr.Key.ParentID, gr.Key.ChildID });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
133
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
134 var list = q.ToList();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
135 Assert.AreEqual(8, list.Count);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
136 });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
137 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
138
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
139 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
140 public void Simple8()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
141 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
142 ForEachProvider(db =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
143 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
144 var q = db.GrandChild.GroupBy(ch => new { ch.ParentID, ch.ChildID }, (g,ch) => g.ChildID);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
145
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
146 var list = q.ToList();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
147 Assert.AreEqual(8, list.Count);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
148 });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
149 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
150
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
151 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
152 public void Simple9()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
153 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
154 ForEachProvider(db =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
155 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
156 var q = db.GrandChild.GroupBy(ch => new { ch.ParentID, ch.ChildID }, ch => ch.GrandChildID, (g,ch) => g.ChildID);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
157 var list = q.ToList();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
158
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
159 Assert.AreEqual(8, list.Count);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
160 });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
161 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
162
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
163 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
164 public void Simple10()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
165 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
166 var expected = (from ch in Child group ch by ch.ParentID into g select g).ToList().OrderBy(p => p.Key).ToList();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
167
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
168 ForEachProvider(db =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
169 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
170 var result = (from ch in db.Child group ch by ch.ParentID into g select g).ToList().OrderBy(p => p.Key).ToList();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
171
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
172 AreEqual(expected[0], result[0]);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
173 AreEqual(expected.Select(p => p.Key), result.Select(p => p.Key));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
174 AreEqual(expected[0].ToList(), result[0].ToList());
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
175 });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
176 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
177
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
178 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
179 public void Simple11()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
180 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
181 ForEachProvider(db =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
182 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
183 var q1 = GrandChild
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
184 .GroupBy(ch => new { ParentID = ch.ParentID + 1, ch.ChildID }, ch => ch.ChildID);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
185
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
186 var q2 = db.GrandChild
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
187 .GroupBy(ch => new { ParentID = ch.ParentID + 1, ch.ChildID }, ch => ch.ChildID);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
188
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
189 var list1 = q1.AsEnumerable().OrderBy(_ => _.Key.ChildID).ToList();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
190 var list2 = q2.AsEnumerable().OrderBy(_ => _.Key.ChildID).ToList();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
191
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
192 Assert.AreEqual(list1.Count, list2.Count);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
193 Assert.AreEqual(list1[0].ToList(), list2[0].ToList());
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
194 });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
195 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
196
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
197 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
198 public void Simple12()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
199 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
200 ForEachProvider(db =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
201 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
202 var q = db.GrandChild
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
203 .GroupBy(ch => new { ParentID = ch.ParentID + 1, ch.ChildID }, (g,ch) => g.ChildID);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
204
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
205 var list = q.ToList();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
206 Assert.AreEqual(8, list.Count);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
207 });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
208 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
209
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
210 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
211 public void Simple13()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
212 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
213 ForEachProvider(db =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
214 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
215 var q = db.GrandChild
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
216 .GroupBy(ch => new { ParentID = ch.ParentID + 1, ch.ChildID }, ch => ch.ChildID, (g,ch) => g.ChildID);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
217
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
218 var list = q.ToList();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
219 Assert.AreEqual(8, list.Count);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
220 });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
221 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
222
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
223 //[Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
224 public void Simple14()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
225 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
226 ForEachProvider(db => AreEqual(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
227 from p in Parent
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
228 select
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
229 from c in p.Children
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
230 group c by c.ParentID into g
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
231 select g.Key,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
232 from p in db.Parent
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
233 select
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
234 from c in p.Children
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
235 group c by c.ParentID into g
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
236 select g.Key));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
237 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
238
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
239 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
240 public void MemberInit1()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
241 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
242 ForEachProvider(db => AreEqual(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
243 from ch in Child
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
244 group ch by new Child { ParentID = ch.ParentID } into g
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
245 select g.Key,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
246 from ch in db.Child
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
247 group ch by new Child { ParentID = ch.ParentID } into g
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
248 select g.Key));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
249 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
250
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
251 class GroupByInfo
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
252 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
253 public GroupByInfo Prev;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
254 public object Field;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
255
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
256 public override bool Equals(object obj)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
257 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
258 return Equals(obj as GroupByInfo);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
259 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
260
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
261 public bool Equals(GroupByInfo other)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
262 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
263 if (ReferenceEquals(null, other)) return false;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
264 if (ReferenceEquals(this, other)) return true;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
265 return Equals(other.Prev, Prev) && Equals(other.Field, Field);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
266 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
267
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
268 public override int GetHashCode()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
269 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
270 unchecked
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
271 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
272 return ((Prev != null ? Prev.GetHashCode() : 0) * 397) ^ (Field != null ? Field.GetHashCode() : 0);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
273 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
274 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
275 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
276
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
277 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
278 public void MemberInit2()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
279 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
280 ForEachProvider(db => AreEqual(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
281 from ch in Child
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
282 group ch by new GroupByInfo { Prev = new GroupByInfo { Field = ch.ParentID }, Field = ch.ChildID } into g
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
283 select g.Key,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
284 from ch in db.Child
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
285 group ch by new GroupByInfo { Prev = new GroupByInfo { Field = ch.ParentID }, Field = ch.ChildID } into g
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
286 select g.Key));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
287 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
288
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
289 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
290 public void MemberInit3()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
291 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
292 ForEachProvider(db => AreEqual(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
293 from ch in Child
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
294 group ch by new { Prev = new { Field = ch.ParentID }, Field = ch.ChildID } into g
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
295 select g.Key,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
296 from ch in db.Child
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
297 group ch by new { Prev = new { Field = ch.ParentID }, Field = ch.ChildID } into g
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
298 select g.Key));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
299 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
300
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
301 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
302 public void SubQuery1()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
303 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
304 var n = 1;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
305
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
306 var expected =
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
307 from ch in
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
308 from ch in Child select ch.ParentID + 1
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
309 where ch + 1 > n
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
310 group ch by ch into g
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
311 select g.Key;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
312
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
313 ForEachProvider(db => AreEqual(expected,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
314 from ch in
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
315 from ch in db.Child select ch.ParentID + 1
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
316 where ch > n
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
317 group ch by ch into g
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
318 select g.Key));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
319 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
320
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
321 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
322 public void SubQuery2()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
323 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
324 var n = 1;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
325
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
326 var expected =
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
327 from ch in Child select new { ParentID = ch.ParentID + 1 } into ch
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
328 where ch.ParentID > n
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
329 group ch by ch into g
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
330 select g.Key;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
331
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
332 ForEachProvider(db => AreEqual(expected,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
333 from ch in db.Child select new { ParentID = ch.ParentID + 1 } into ch
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
334 where ch.ParentID > n
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
335 group ch by ch into g
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
336 select g.Key));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
337 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
338
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
339 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
340 public void SubQuery3()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
341 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
342 ForEachProvider(db => AreEqual(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
343 from ch in
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
344 from ch in Child
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
345 select new { ch, n = ch.ChildID + 1 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
346 group ch by ch.n into g
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
347 select new
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
348 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
349 g.Key,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
350 Sum = g.Sum(_ => _.ch.ParentID)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
351 },
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
352 from ch in
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
353 from ch in db.Child
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
354 select new { ch, n = ch.ChildID + 1 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
355 group ch by ch.n into g
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
356 select new
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
357 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
358 g.Key,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
359 Sum = g.Sum(_ => _.ch.ParentID)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
360 }));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
361 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
362
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
363 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
364 public void SubQuery31()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
365 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
366 ForEachProvider(db => AreEqual(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
367 from ch in
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
368 from ch in Child
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
369 select new { ch, n = ch.ChildID + 1 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
370 group ch.ch by ch.n into g
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
371 select new
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
372 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
373 g.Key,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
374 Sum = g.Sum(_ => _.ParentID)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
375 },
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
376 from ch in
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
377 from ch in db.Child
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
378 select new { ch, n = ch.ChildID + 1 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
379 group ch.ch by ch.n into g
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
380 select new
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
381 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
382 g.Key,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
383 Sum = g.Sum(_ => _.ParentID)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
384 }));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
385 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
386
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
387 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
388 public void SubQuery32()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
389 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
390 ForEachProvider(db => AreEqual(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
391 from ch in
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
392 from ch in Child
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
393 select new { ch, n = ch.ChildID + 1 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
394 group ch.ch.ParentID by ch.n into g
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
395 select new
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
396 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
397 g.Key,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
398 Sum = g.Sum(_ => _)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
399 },
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
400 from ch in
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
401 from ch in db.Child
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
402 select new { ch, n = ch.ChildID + 1 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
403 group ch.ch.ParentID by ch.n into g
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
404 select new
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
405 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
406 g.Key,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
407 Sum = g.Sum(_ => _)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
408 }));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
409 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
410
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
411 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
412 public void SubQuery4()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
413 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
414 ForEachProvider(db => AreEqual(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
415 from ch in Child
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
416 group ch by new { n = ch.ChildID + 1 } into g
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
417 select new
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
418 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
419 g.Key,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
420 Sum = g.Sum(_ => _.ParentID)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
421 },
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
422 from ch in db.Child
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
423 group ch by new { n = ch.ChildID + 1 } into g
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
424 select new
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
425 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
426 g.Key,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
427 Sum = g.Sum(_ => _.ParentID)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
428 }));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
429 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
430
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
431 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
432 public void SubQuery5()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
433 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
434 ForEachProvider(db => AreEqual(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
435 from ch in Child
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
436 join p in Parent on ch.ParentID equals p.ParentID into pg
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
437 from p in pg.DefaultIfEmpty()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
438 group ch by ch.ChildID into g
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
439 select g.Sum(_ => _.ParentID),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
440 from ch in db.Child
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
441 join p in db.Parent on ch.ParentID equals p.ParentID into pg
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
442 from p in pg.DefaultIfEmpty()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
443 group ch by ch.ChildID into g
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
444 select g.Sum(_ => _.ParentID)));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
445 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
446
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
447 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
448 public void SubQuery6()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
449 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
450 var expected =
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
451 from ch in Child select new { ParentID = ch.ParentID + 1 } into ch
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
452 group ch.ParentID by ch into g
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
453 select g.Key;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
454
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
455 ForEachProvider(db => AreEqual(expected,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
456 from ch in db.Child select new { ParentID = ch.ParentID + 1 } into ch
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
457 group ch.ParentID by ch into g
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
458 select g.Key));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
459 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
460
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
461 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
462 public void SubQuery7()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
463 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
464 ForEachProvider(db => AreEqual(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
465 from p in Parent
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
466 join c in
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
467 from c in Child
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
468 where c.ParentID == 1
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
469 select c
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
470 on p.ParentID equals c.ParentID into g
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
471 from c in g.DefaultIfEmpty()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
472 group p by c == null ? 0 : c.ChildID into gg
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
473 select new { gg.Key },
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
474 from p in db.Parent
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
475 join c in
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
476 from c in db.Child
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
477 where c.ParentID == 1
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
478 select c
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
479 on p.ParentID equals c.ParentID into g
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
480 from c in g.DefaultIfEmpty()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
481 group p by c.ChildID into gg
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
482 select new { gg.Key }));
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 Calculated1()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
487 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
488 var expected =
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
489 (
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
490 from ch in Child
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
491 group ch by ch.ParentID > 2 ? ch.ParentID > 3 ? "1" : "2" : "3"
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
492 into g select g
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
493 ).ToList().OrderBy(p => p.Key).ToList();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
494
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
495 ForEachProvider(db =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
496 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
497 var result =
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
498 (
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
499 from ch in db.Child
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
500 group ch by ch.ParentID > 2 ? ch.ParentID > 3 ? "1" : "2" : "3"
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
501 into g select g
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
502 ).ToList().OrderBy(p => p.Key).ToList();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
503
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
504 AreEqual(expected[0], result[0]);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
505 AreEqual(expected.Select(p => p.Key), result.Select(p => p.Key));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
506 });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
507 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
508
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
509 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
510 public void Calculated2()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
511 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
512 var expected =
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
513 from p in
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
514 from ch in
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
515 from ch in Child
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
516 group ch by ch.ParentID > 2 ? ch.ParentID > 3 ? "1" : "2" : "3"
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
517 into g select g
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
518 select ch.Key + "2"
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
519 where p == "22"
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
520 select p;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
521
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
522 ForEachProvider(db => AreEqual(expected,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
523 from p in
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
524 from ch in
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
525 from ch in db.Child
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
526 group ch by ch.ParentID > 2 ? ch.ParentID > 3 ? "1" : "2" : "3"
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
527 into g select g
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
528 select ch.Key + "2"
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
529 where p == "22"
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
530 select p));
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 GroupBy1()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
535 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
536 ForEachProvider(db => AreEqual(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
537 Child.GroupBy(ch => ch.ParentID).GroupBy(ch => ch).GroupBy(ch => ch).Select(p => p.Key.Key.Key),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
538 db.Child.GroupBy(ch => ch.ParentID).GroupBy(ch => ch).GroupBy(ch => ch).Select(p => p.Key.Key.Key)));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
539 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
540
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
541 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
542 public void GroupBy2()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
543 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
544 ForEachProvider(db => AreEqual(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
545 from p in Parent
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
546 join c in Child on p.ParentID equals c.ParentID
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
547 group p by new
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
548 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
549 ID = p.Value1 ?? c.ChildID
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
550 } into gr
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
551 select new
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
552 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
553 gr.Key.ID,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
554 ID1 = gr.Key.ID + 1,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
555 },
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
556 from p in db.Parent
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
557 join c in db.Child on p.ParentID equals c.ParentID
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
558 group p by new
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
559 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
560 ID = p.Value1 ?? c.ChildID
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
561 } into gr
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
562 select new
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
563 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
564 gr.Key.ID,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
565 ID1 = gr.Key.ID + 1,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
566 }));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
567 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
568
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
569 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
570 public void GroupBy3()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
571 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
572 ForEachProvider(db => AreEqual(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
573 from p in Parent
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
574 join c in Child on p.ParentID equals c.ParentID
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
575 group p by p.Value1 ?? c.ChildID into gr
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
576 select new
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
577 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
578 gr.Key
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
579 },
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
580 from p in db.Parent
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
581 join c in db.Child on p.ParentID equals c.ParentID
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
582 group p by p.Value1 ?? c.ChildID into gr
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
583 select new
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
584 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
585 gr.Key
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
586 }));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
587 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
588
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
589 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
590 public void Sum1()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
591 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
592 var expected =
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
593 from ch in Child
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
594 group ch by ch.ParentID into g
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
595 select g.Sum(p => p.ChildID);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
596
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
597 ForEachProvider(db => AreEqual(expected,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
598 from ch in db.Child
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
599 group ch by ch.ParentID into g
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
600 select g.Sum(p => p.ChildID)));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
601 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
602
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
603 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
604 public void Sum2()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
605 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
606 var expected =
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
607 from ch in Child
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
608 group ch by ch.ParentID into g
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
609 select new { Sum = g.Sum(p => p.ChildID) };
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
610
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
611 ForEachProvider(db => AreEqual(expected,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
612 from ch in db.Child
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
613 group ch by ch.ParentID into g
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
614 select new { Sum = g.Sum(p => p.ChildID) }));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
615 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
616
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
617 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
618 public void Sum3()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
619 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
620 ForEachProvider(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
621 new[] { ProviderName.SqlCe },
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
622 db => AreEqual(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
623 from ch in Child
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
624 group ch by ch.Parent into g
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
625 select g.Key.Children.Sum(p => p.ChildID),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
626 from ch in db.Child
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
627 group ch by ch.Parent into g
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
628 select g.Key.Children.Sum(p => p.ChildID)));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
629 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
630
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
631 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
632 public void SumSubQuery1()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
633 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
634 var n = 1;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
635
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
636 var expected =
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
637 from ch in
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
638 from ch in Child select new { ParentID = ch.ParentID + 1, ch.ChildID }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
639 where ch.ParentID + 1 > n group ch by ch into g
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
640 select g.Sum(p => p.ParentID - 3);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
641
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
642 ForEachProvider(db => AreEqual(expected,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
643 from ch in
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
644 from ch in db.Child select new { ParentID = ch.ParentID + 1, ch.ChildID }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
645 where ch.ParentID + 1 > n group ch by ch into g
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
646 select g.Sum(p => p.ParentID - 3)));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
647 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
648
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
649 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
650 public void GroupByMax()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
651 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
652 ForEachProvider(db => AreEqual(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
653 from ch in Child group ch.ParentID by ch.ChildID into g select new { Max = g.Max() },
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
654 from ch in db.Child group ch.ParentID by ch.ChildID into g select new { Max = g.Max() }));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
655 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
656
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
657 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
658 public void Aggregates1()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
659 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
660 ForEachProvider(db => AreEqual(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
661 from ch in Child
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
662 group ch by ch.ParentID into g
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
663 select new
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
664 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
665 Cnt = g.Count(),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
666 Sum = g.Sum(c => c.ChildID),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
667 Min = g.Min(c => c.ChildID),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
668 Max = g.Max(c => c.ChildID),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
669 Avg = (int)g.Average(c => c.ChildID),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
670 },
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
671 from ch in db.Child
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
672 group ch by ch.ParentID into g
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
673 select new
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
674 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
675 Cnt = g.Count(),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
676 Sum = g.Sum(c => c.ChildID),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
677 Min = g.Min(c => c.ChildID),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
678 Max = g.Max(c => c.ChildID),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
679 Avg = (int)g.Average(c => c.ChildID),
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 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
684 public void Aggregates2()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
685 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
686 ForEachProvider(db => AreEqual(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
687 from ch in Child
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
688 group ch by ch.ParentID into g
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
689 select new
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
690 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
691 Sum = g.Select(c => c.ChildID).Sum(),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
692 Min = g.Select(c => c.ChildID).Min(),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
693 Max = g.Select(c => c.ChildID).Max(),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
694 Avg = (int)g.Select(c => c.ChildID).Average(),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
695 Cnt = g.Count()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
696 },
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
697 from ch in db.Child
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
698 group ch by ch.ParentID into g
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
699 select new
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
700 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
701 Sum = g.Select(c => c.ChildID).Sum(),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
702 Min = g.Select(c => c.ChildID).Min(),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
703 Max = g.Select(c => c.ChildID).Max(),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
704 Avg = (int)g.Select(c => c.ChildID).Average(),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
705 Cnt = g.Count()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
706 }));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
707 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
708
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
709 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
710 public void Aggregates3()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
711 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
712 ForEachProvider(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
713 new[] { ProviderName.SqlCe },
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
714 db => AreEqual(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
715 from ch in Child
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
716 where ch.ChildID > 30
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
717 group ch by ch.ParentID into g
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
718 select new
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
719 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
720 Sum = g.Select(c => c.ChildID).Where(_ => _ > 30).Sum(),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
721 Min = g.Select(c => c.ChildID).Where(_ => _ > 30).Min(),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
722 Max = g.Select(c => c.ChildID).Where(_ => _ > 30).Max(),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
723 Avg = (int)g.Select(c => c.ChildID).Where(_ => _ > 30).Average(),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
724 },
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
725 from ch in db.Child
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
726 where ch.ChildID > 30
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
727 group ch by ch.ParentID into g
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
728 select new
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
729 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
730 Sum = g.Select(c => c.ChildID).Where(_ => _ > 30).Sum(),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
731 Min = g.Select(c => c.ChildID).Where(_ => _ > 30).Min(),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
732 Max = g.Select(c => c.ChildID).Where(_ => _ > 30).Max(),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
733 Avg = (int)g.Select(c => c.ChildID).Where(_ => _ > 30).Average(),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
734 }));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
735 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
736
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
737 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
738 public void Aggregates4()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
739 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
740 ForEachProvider(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
741 new[] { ProviderName.SqlCe },
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
742 db => AreEqual(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
743 from ch in Child
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
744 group ch by ch.ParentID into g
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
745 select new
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
746 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
747 Count = g.Count(_ => _.ChildID > 30),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
748 Sum = g.Where(_ => _.ChildID > 30).Sum(c => c.ChildID),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
749 },
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
750 from ch in db.Child
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
751 group ch by ch.ParentID into g
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
752 select new
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
753 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
754 Count = g.Count(_ => _.ChildID > 30),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
755 Sum = g.Where(_ => _.ChildID > 30).Sum(c => c.ChildID),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
756 }));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
757 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
758
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
759 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
760 public void SelectMax()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
761 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
762 var expected =
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
763 from ch in Child
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
764 group ch by ch.ParentID into g
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
765 select g.Max(c => c.ChildID);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
766
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
767 ForEachProvider(db => AreEqual(expected,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
768 from ch in db.Child
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
769 group ch by ch.ParentID into g
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
770 select g.Max(c => c.ChildID)));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
771 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
772
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
773 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
774 public void JoinMax()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
775 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
776 var expected =
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
777 from ch in Child
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
778 join max in
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
779 from ch in Child
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
780 group ch by ch.ParentID into g
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
781 select g.Max(c => c.ChildID)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
782 on ch.ChildID equals max
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
783 select ch;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
784
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
785 ForEachProvider(db => AreEqual(expected,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
786 from ch in db.Child
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
787 join max in
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
788 from ch in db.Child
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
789 group ch by ch.ParentID into g
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
790 select g.Max(c => c.ChildID)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
791 on ch.ChildID equals max
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
792 select ch));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
793 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
794
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
795 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
796 public void Min1()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
797 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
798 var expected = Child.Min(c => c.ChildID);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
799 ForEachProvider(db => Assert.AreEqual(expected, db.Child.Min(c => c.ChildID)));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
800 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
801
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
802 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
803 public void Min2()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
804 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
805 var expected = Child.Select(c => c.ChildID).Min();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
806 ForEachProvider(db => Assert.AreEqual(expected, db.Child.Select(c => c.ChildID).Min()));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
807 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
808
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
809 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
810 public void Max1()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
811 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
812 var expected = Child.Max(c => c.ChildID);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
813 Assert.AreNotEqual(0, expected);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
814 ForEachProvider(db => Assert.AreEqual(expected, db.Child.Max(c => c.ChildID)));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
815 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
816
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
817 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
818 public void Max11()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
819 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
820 ForEachProvider(db => Assert.AreEqual(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
821 Child.Max(c => c.ChildID > 20),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
822 db.Child.Max(c => c.ChildID > 20)));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
823 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
824
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
825 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
826 public void Max12()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
827 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
828 ForEachProvider(db => Assert.AreEqual(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
829 Child.Max(c => (bool?)(c.ChildID > 20)),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
830 db.Child.Max(c => (bool?)(c.ChildID > 20))));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
831 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
832
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
833 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
834 public void Max2()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
835 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
836 var expected =
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
837 from p in Parent
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
838 join c in Child on p.ParentID equals c.ParentID
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
839 where c.ChildID > 20
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
840 select p;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
841
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
842 ForEachProvider(db =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
843 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
844 var result =
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
845 from p in db.Parent
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
846 join c in db.Child on p.ParentID equals c.ParentID
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
847 where c.ChildID > 20
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
848 select p;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
849
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
850 Assert.AreEqual(expected.Max(p => p.ParentID), result.Max(p => p.ParentID));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
851 });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
852 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
853
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
854 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
855 public void Max3()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
856 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
857 ForEachProvider(db => Assert.AreEqual(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
858 Child.Select(c => c.ChildID).Max(),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
859 db.Child.Select(c => c.ChildID).Max()));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
860 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
861
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
862 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
863 public void Max4()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
864 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
865 ForEachProvider(db => Assert.AreEqual(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
866 from t1 in Types
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
867 join t2 in
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
868 from sub in Types
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
869 where
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
870 sub.ID == 1 &&
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
871 sub.DateTimeValue <= DateTime.Today
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
872 group sub by new
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
873 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
874 sub.ID
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
875 } into g
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
876 select new
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
877 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
878 g.Key.ID,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
879 DateTimeValue = g.Max( p => p.DateTimeValue )
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
880 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
881 on new { t1.ID, t1.DateTimeValue } equals new { t2.ID, t2.DateTimeValue }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
882 select t1.MoneyValue,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
883 from t1 in db.Types
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
884 join t2 in
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
885 from sub in db.Types
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
886 where
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
887 sub.ID == 1 &&
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
888 sub.DateTimeValue <= DateTime.Today
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
889 group sub by new
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
890 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
891 sub.ID
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
892 } into g
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
893 select new
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
894 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
895 g.Key.ID,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
896 DateTimeValue = g.Max( p => p.DateTimeValue )
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
897 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
898 on new { t1.ID, t1.DateTimeValue } equals new { t2.ID, t2.DateTimeValue }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
899 select t1.MoneyValue
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
900 ));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
901 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
902
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
903 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
904 public void Average1()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
905 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
906 ForEachProvider(db => Assert.AreEqual(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
907 (int)db.Child.Average(c => c.ChildID),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
908 (int) Child.Average(c => c.ChildID)));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
909 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
910
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
911 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
912 public void Average2()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
913 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
914 var expected = Child.Select(c => c.ChildID).Average();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
915 ForEachProvider(db => Assert.AreEqual((int)expected, (int)db.Child.Select(c => c.ChildID).Average()));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
916 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
917
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
918 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
919 public void GrooupByAssociation1()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
920 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
921 ForEachProvider(db => AreEqual(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
922 from ch in GrandChild1
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
923 group ch by ch.Parent into g
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
924 where g.Count() > 2
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
925 select g.Key.Value1
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
926 ,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
927 from ch in db.GrandChild1
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
928 group ch by ch.Parent into g
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
929 where g.Count() > 2
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
930 select g.Key.Value1));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
931 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
932
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
933 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
934 public void GrooupByAssociation101()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
935 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
936 ForEachProvider(db => AreEqual(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
937 from ch in GrandChild1
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
938 group ch by ch.Parent into g
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
939 where g.Max(_ => _.ParentID) > 2
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
940 select g.Key.Value1
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
941 ,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
942 from ch in db.GrandChild1
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
943 group ch by ch.Parent into g
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
944 where g.Max(_ => _.ParentID) > 2
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
945 select g.Key.Value1));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
946 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
947
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
948 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
949 public void GrooupByAssociation102()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
950 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
951 ForEachProvider(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
952 new[] { ProviderName.Informix },
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
953 db => AreEqual(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
954 from ch in GrandChild1
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
955 group ch by ch.Parent into g
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
956 where g.Count(_ => _.ChildID >= 20) > 2
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
957 select g.Key.Value1
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
958 ,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
959 from ch in db.GrandChild1
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
960 group ch by ch.Parent into g
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
961 where g.Count(_ => _.ChildID >= 20) > 2
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
962 select g.Key.Value1));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
963 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
964
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
965 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
966 public void GrooupByAssociation1022()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
967 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
968 ForEachProvider(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
969 new[] { ProviderName.SqlCe, ProviderName.Access, ProviderName.Informix }, // Can be fixed.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
970 db => AreEqual(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
971 from ch in GrandChild1
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
972 group ch by ch.Parent into g
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
973 where g.Count(_ => _.ChildID >= 20) > 2 && g.Where(_ => _.ChildID >= 19).Sum(p => p.ParentID) > 0
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
974 select g.Key.Value1
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
975 ,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
976 from ch in db.GrandChild1
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
977 group ch by ch.Parent into g
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
978 where g.Count(_ => _.ChildID >= 20) > 2 && g.Where(_ => _.ChildID >= 19).Sum(p => p.ParentID) > 0
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
979 select g.Key.Value1));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
980 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
981
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
982 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
983 public void GrooupByAssociation1023()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
984 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
985 ForEachProvider(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
986 new[] { ProviderName.SqlCe, ProviderName.Access, ProviderName.Informix }, // Can be fixed.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
987 db => AreEqual(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
988 from ch in GrandChild1
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
989 group ch by ch.Parent into g
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
990 where
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
991 g.Count(_ => _.ChildID >= 20) > 2 &&
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
992 g.Where(_ => _.ChildID >= 19).Sum(p => p.ParentID) > 0 &&
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
993 g.Where(_ => _.ChildID >= 19).Max(p => p.ParentID) > 0
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
994 select g.Key.Value1
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
995 ,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
996 from ch in db.GrandChild1
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
997 group ch by ch.Parent into g
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
998 where
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
999 g.Count(_ => _.ChildID >= 20) > 2 &&
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1000 g.Where(_ => _.ChildID >= 19).Sum(p => p.ParentID) > 0 &&
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1001 g.Where(_ => _.ChildID >= 19).Max(p => p.ParentID) > 0
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1002 select g.Key.Value1));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1003 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1004
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1005 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1006 public void GrooupByAssociation1024()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1007 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1008 ForEachProvider(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1009 new[] { ProviderName.SqlCe, ProviderName.Access, ProviderName.Informix }, // Can be fixed.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1010 db => AreEqual(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1011 from ch in GrandChild1
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1012 group ch by ch.Parent into g
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1013 where
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1014 g.Count(_ => _.ChildID >= 20) > 2 &&
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1015 g.Where(_ => _.ChildID >= 19).Sum(p => p.ParentID) > 0 &&
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1016 g.Where(_ => _.ChildID >= 19).Max(p => p.ParentID) > 0 &&
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1017 g.Where(_ => _.ChildID >= 18).Max(p => p.ParentID) > 0
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1018 select g.Key.Value1
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1019 ,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1020 from ch in db.GrandChild1
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1021 group ch by ch.Parent into g
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1022 where
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1023 g.Count(_ => _.ChildID >= 20) > 2 &&
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1024 g.Where(_ => _.ChildID >= 19).Sum(p => p.ParentID) > 0 &&
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1025 g.Where(_ => _.ChildID >= 19).Max(p => p.ParentID) > 0 &&
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1026 g.Where(_ => _.ChildID >= 18).Max(p => p.ParentID) > 0
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1027 select g.Key.Value1));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1028 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1029
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1030 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1031 public void GrooupByAssociation2()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1032 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1033 ForEachProvider(db => AreEqual(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1034 from ch in GrandChild1
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1035 group ch by ch.Parent into g
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1036 where g.Count() > 2 && g.Key.ParentID != 1
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1037 select g.Key.Value1
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1038 ,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1039 from ch in db.GrandChild1
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1040 group ch by ch.Parent into g
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1041 where g.Count() > 2 && g.Key.ParentID != 1
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1042 select g.Key.Value1));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1043 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1044
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1045 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1046 public void GrooupByAssociation3([IncludeDataContexts("Northwind")] string context)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1047 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1048 using (var db = new NorthwindDB())
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1049 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1050 var result =
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1051 from p in db.Product
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1052 group p by p.Category into g
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1053 where g.Count() == 12
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1054 select g.Key.CategoryName;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1055
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1056 var list = result.ToList();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1057 Assert.AreEqual(3, list.Count);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1058 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1059 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1060
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1061 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1062 public void GrooupByAssociation4([IncludeDataContexts("Northwind")] string context)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1063 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1064 using (var db = new NorthwindDB())
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1065 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1066 var result =
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1067 from p in db.Product
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1068 group p by p.Category into g
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1069 where g.Count() == 12
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1070 select g.Key.CategoryID;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1071
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1072 var list = result.ToList();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1073 Assert.AreEqual(3, list.Count);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1074 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1075 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1076
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1077 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1078 public void GroupByAggregate1()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1079 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1080 var expected =
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1081 from p in Parent
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1082 group p by p.Children.Count > 0 && p.Children.Average(c => c.ParentID) > 3 into g
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1083 select g.Key;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1084
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1085 ForEachProvider(new[] { ProviderName.SqlCe }, db => AreEqual(expected,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1086 from p in db.Parent
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1087 group p by p.Children.Average(c => c.ParentID) > 3 into g
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1088 select g.Key));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1089 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1090
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1091 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1092 public void GroupByAggregate11()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1093 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1094 var expected =
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1095 from p in Parent
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1096 where p.Children.Count > 0
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1097 group p by p.Children.Average(c => c.ParentID) > 3 into g
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1098 select g.Key;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1099
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1100 ForEachProvider(new[] { ProviderName.SqlCe }, db => AreEqual(expected,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1101 from p in db.Parent
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1102 where p.Children.Count > 0
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1103 group p by p.Children.Average(c => c.ParentID) > 3 into g
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1104 select g.Key));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1105 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1106
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1107 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1108 public void GroupByAggregate12()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1109 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1110 var expected =
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1111 from p in Parent
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1112 group p by p.Children.Count > 0 && p.Children.Average(c => c.ParentID) > 3 into g
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1113 select g.Key;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1114
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1115 ForEachProvider(new[] { ProviderName.SqlCe }, db => AreEqual(expected,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1116 from p in db.Parent
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1117 group p by p.Children.Count > 0 && p.Children.Average(c => c.ParentID) > 3 into g
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1118 select g.Key));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1119 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1120
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1121 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1122 public void GroupByAggregate2([IncludeDataContexts("Northwind")] string context)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1123 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1124 using (var db = new NorthwindDB())
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1125 AreEqual(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1126 (
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1127 from c in Customer
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1128 group c by c.Orders.Count > 0 && c.Orders.Average(o => o.Freight) >= 80
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1129 ).ToList().Select(k => k.Key),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1130 (
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1131 from c in db.Customer
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1132 group c by c.Orders.Average(o => o.Freight) >= 80
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1133 ).ToList().Select(k => k.Key));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1134 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1135
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1136 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1137 public void GroupByAggregate3()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1138 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1139 var expected =
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1140 (
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1141 from p in Parent
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1142 group p by p.Children.Count > 0 && p.Children.Average(c => c.ParentID) > 3
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1143 ).ToList().First(g => !g.Key);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1144
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1145 ForEachProvider(new[] { ProviderName.SqlCe }, db => AreEqual(expected,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1146 (
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1147 from p in db.Parent
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1148 group p by p.Children.Average(c => c.ParentID) > 3
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1149 ).ToList().First(g => !g.Key)));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1150 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1151
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1152 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1153 public void ByJoin()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1154 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1155 ForEachProvider(db => AreEqual(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1156 from c1 in Child
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1157 join c2 in Child on c1.ChildID equals c2.ChildID + 1
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1158 group c2 by c1.ParentID into g
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1159 select g.Sum(_ => _.ChildID),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1160 from c1 in db.Child
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1161 join c2 in db.Child on c1.ChildID equals c2.ChildID + 1
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1162 group c2 by c1.ParentID into g
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1163 select g.Sum(_ => _.ChildID)));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1164 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1165
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1166 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1167 public void SelectMany()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1168 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1169 ForEachProvider(db => AreEqual(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1170 Child.GroupBy(ch => ch.ParentID).SelectMany(g => g),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1171 db.Child.GroupBy(ch => ch.ParentID).SelectMany(g => g)));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1172 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1173
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1174 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1175 public void Scalar1()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1176 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1177 ForEachProvider(new[] { ProviderName.SqlCe }, db => AreEqual(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1178 (from ch in Child
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1179 group ch by ch.ParentID into g
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1180 select g.Select(ch => ch.ChildID).Max()),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1181 (from ch in db.Child
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1182 group ch by ch.ParentID into g
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1183 select g.Select(ch => ch.ChildID).Max())));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1184 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1185
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1186 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1187 public void Scalar101()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1188 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1189 ForEachProvider(db => AreEqual(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1190 (from ch in Child
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1191 select ch.ChildID into id
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1192 group id by id into g
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1193 select g.Max()),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1194 (from ch in db.Child
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1195 select ch.ChildID into id
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1196 group id by id into g
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1197 select g.Max())));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1198 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1199
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1200 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1201 public void Scalar2()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1202 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1203 ForEachProvider(new[] { ProviderName.SqlCe }, db => AreEqual(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1204 (from ch in Child
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1205 group ch by ch.ParentID into g
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1206 select new
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1207 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1208 Max1 = g.Select(ch => ch.ChildID ).Max(),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1209 Max2 = g.Select(ch => ch.ChildID + ch.ParentID).Max()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1210 }),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1211 (from ch in db.Child
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1212 group ch by ch.ParentID into g
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1213 select new
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1214 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1215 Max1 = g.Select(ch => ch.ChildID ).Max(),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1216 Max2 = g.Select(ch => ch.ChildID + ch.ParentID).Max()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1217 })));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1218 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1219
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1220 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1221 public void Scalar3()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1222 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1223 ForEachProvider(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1224 new[] { ProviderName.SqlCe },
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1225 db => AreEqual(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1226 (from ch in Child
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1227 group ch by ch.ParentID into g
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1228 select g.Select(ch => ch.ChildID).Where(id => id > 0).Max()),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1229 (from ch in db.Child
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1230 group ch by ch.ParentID into g
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1231 select g.Select(ch => ch.ChildID).Where(id => id > 0).Max())));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1232 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1233
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1234 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1235 public void Scalar4()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1236 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1237 ForEachProvider(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1238 new[] { ProviderName.SqlCe, ProviderName.Access, ProviderName.Informix },
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1239 db => AreEqual(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1240 from ch in Child
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1241 group ch by ch.ParentID into g
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1242 where g.Where(ch => ch.ParentID > 2).Select(ch => (int?)ch.ChildID).Min() != null
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1243 select g.Where(ch => ch.ParentID > 2).Select(ch => ch.ChildID).Min()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1244 ,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1245 from ch in db.Child
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1246 group ch by ch.ParentID into g
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1247 where g.Where(ch => ch.ParentID > 2).Select(ch => (int?)ch.ChildID).Min() != null
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1248 select g.Where(ch => ch.ParentID > 2).Select(ch => ch.ChildID).Min()));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1249 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1250
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1251 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1252 public void Scalar41()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1253 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1254 ForEachProvider(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1255 new[] { ProviderName.SqlCe, ProviderName.Access, ProviderName.Informix },
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1256 db => AreEqual(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1257 from ch in Child
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1258 group ch by ch.ParentID into g
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1259 select new { g } into g
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1260 where g.g.Where(ch => ch.ParentID > 2).Select(ch => (int?)ch.ChildID).Min() != null
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1261 select g.g.Where(ch => ch.ParentID > 2).Select(ch => ch.ChildID).Min()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1262 ,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1263 from ch in db.Child
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1264 group ch by ch.ParentID into g
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1265 select new { g } into g
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1266 where g.g.Where(ch => ch.ParentID > 2).Select(ch => (int?)ch.ChildID).Min() != null
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1267 select g.g.Where(ch => ch.ParentID > 2).Select(ch => ch.ChildID).Min()));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1268 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1269
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1270 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1271 public void Scalar5()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1272 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1273 ForEachProvider(db => AreEqual(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1274 from ch in Child
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1275 select ch.ParentID into id
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1276 group id by id into g
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1277 select g.Max()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1278 ,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1279 from ch in db.Child
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1280 select ch.ParentID into id
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1281 group id by id into g
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1282 select g.Max()));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1283 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1284
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1285 //[Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1286 public void Scalar51()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1287 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1288 ForEachProvider(db => AreEqual(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1289 from ch in Child
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1290 group ch by ch.ParentID into g
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1291 select g.Max()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1292 ,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1293 from ch in db.Child
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1294 group ch by ch.ParentID into g
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1295 select g.Max()));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1296 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1297
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1298 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1299 public void Scalar6()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1300 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1301 ForEachProvider(new[] { ProviderName.SqlCe }, db => AreEqual(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1302 (from ch in Child
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1303 where ch.ParentID < 3
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1304 group ch by ch.ParentID into g
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1305 select g.Where(ch => ch.ParentID < 3).Max(ch => ch.ChildID)),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1306 (from ch in db.Child
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1307 where ch.ParentID < 3
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1308 group ch by ch.ParentID into g
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1309 select g.Where(ch => ch.ParentID < 3).Max(ch => ch.ChildID))));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1310 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1311
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1312 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1313 public void Scalar7()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1314 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1315 ForEachProvider(new[] { ProviderName.SqlCe }, db => AreEqual(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1316 (from ch in Child
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1317 group ch by ch.ParentID into g
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1318 select new { max = g.Select(ch => ch.ChildID).Max()}).Select(id => id.max),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1319 (from ch in db.Child
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1320 group ch by ch.ParentID into g
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1321 select new { max = g.Select(ch => ch.ChildID).Max()}).Select(id => id.max)));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1322 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1323
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1324 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1325 public void Scalar8()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1326 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1327 ForEachProvider(db => AreEqual(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1328 (from ch in Child
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1329 group ch by ch.ParentID into g
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1330 select new { max = g.Max(ch => ch.ChildID)}).Select(id => id.max),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1331 (from ch in db.Child
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1332 group ch by ch.ParentID into g
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1333 select new { max = g.Max(ch => ch.ChildID)}).Select(id => id.max)));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1334 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1335
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1336 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1337 public void Scalar9()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1338 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1339 ForEachProvider(new[] { ProviderName.SqlCe }, db => AreEqual(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1340 (from ch in Child
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1341 group ch by ch.ParentID into g
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1342 select g.Select(ch => ch.ChildID).Where(id => id < 30).Count()),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1343 (from ch in db.Child
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1344 group ch by ch.ParentID into g
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1345 select g.Select(ch => ch.ChildID).Where(id => id < 30).Count())));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1346 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1347
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1348 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1349 public void Scalar10()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1350 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1351 ForEachProvider(new[] { ProviderName.SqlCe }, db => AreEqual(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1352 (from ch in Child
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1353 group ch by ch.ParentID into g
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1354 select g.Select(ch => ch.ChildID).Where(id => id < 30).Count(id => id >= 20)),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1355 (from ch in db.Child
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1356 group ch by ch.ParentID into g
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1357 select g.Select(ch => ch.ChildID).Where(id => id < 30).Count(id => id >= 20))));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1358 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1359
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1360 [Test, Category("MySql")]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1361 public void GroupByExtraFieldBugTest([IncludeDataContexts(ProviderName.MySql)] string context)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1362 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1363 // https://github.com/igor-tkachev/bltoolkit/issues/42
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1364 // extra field is generated in the GROUP BY clause, for example:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1365 // GROUP BY p.LastName, p.LastName <--- the second one is redundant
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1366
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1367 using (var db = new TestDbManager(context))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1368 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1369 var q =
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1370 from d in db.Doctor
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1371 join p in db.Person on d.PersonID equals p.ID
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1372 group d by p.LastName into g
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1373 select g.Key;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1374
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1375 q.ToList();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1376
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1377 const string fieldName = "LastName";
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1378
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1379 var lastQuery = db.LastQuery;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1380 var groupByPos = lastQuery.IndexOf("GROUP BY");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1381 var fieldPos = lastQuery.IndexOf(fieldName, groupByPos);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1382
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1383 // check that our field does not present in the GROUP BY clause second time
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1384 Assert.AreEqual(-1, lastQuery.IndexOf(fieldName, fieldPos + 1));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1385 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1386 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1387
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1388 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1389 public void DoubleGroupBy1()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1390 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1391 ForEachProvider(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1392 db => AreEqual(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1393 from t in
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1394 from p in Parent
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1395 where p.Value1 != null
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1396 group p by p.ParentID into g
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1397 select new
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1398 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1399 ID = g.Key,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1400 Max = g.Max(t => t.Value1)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1401 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1402 group t by t.ID into g
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1403 select new
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1404 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1405 g.Key,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1406 Sum = g.Sum(t => t.Max)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1407 },
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1408 from t in
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1409 from p in db.Parent
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1410 where p.Value1 != null
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1411 group p by p.ParentID into g
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1412 select new
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1413 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1414 ID = g.Key,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1415 Max = g.Max(t => t.Value1)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1416 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1417 group t by t.ID into g
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1418 select new
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1419 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1420 g.Key,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1421 Sum = g.Sum(t => t.Max)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1422 }));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1423
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1424 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1425
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1426 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1427 public void DoubleGroupBy2()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1428 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1429 ForEachProvider(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1430 db => AreEqual(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1431 from p in Parent
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1432 where p.Value1 != null
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1433 group p by p.ParentID into g
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1434 select new
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1435 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1436 ID = g.Key,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1437 Max = g.Max(t => t.Value1)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1438 } into t
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1439 group t by t.ID into g
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1440 select new
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1441 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1442 g.Key,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1443 Sum = g.Sum(t => t.Max)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1444 },
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1445 from p in db.Parent
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1446 where p.Value1 != null
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1447 group p by p.ParentID into g
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1448 select new
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1449 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1450 ID = g.Key,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1451 Max = g.Max(t => t.Value1)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1452 } into t
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1453 group t by t.ID into g
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1454 select new
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1455 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1456 g.Key,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1457 Sum = g.Sum(t => t.Max)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1458 }));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1459
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1460 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1461
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1462 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1463 public void InnerQuery([DataContexts(ProviderName.SqlCe)] string context)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1464 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1465 using (var db = GetDataContext(context))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1466 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1467 AreEqual(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1468 Doctor.GroupBy(s => s.PersonID).Select(s => s.Select(d => d.Taxonomy).First()),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1469 db.Doctor.GroupBy(s => s.PersonID).Select(s => s.Select(d => d.Taxonomy).First()));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1470 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1471 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1472
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1473 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1474 public void CalcMember([DataContexts] string context)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1475 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1476 using (var db = GetDataContext(context))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1477 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1478 AreEqual(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1479 from parent in Parent
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1480 from child in Person
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1481 where child.ID == parent.ParentID
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1482 let data = new
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1483 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1484 parent.Value1,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1485 Value = child.FirstName == "John" ? child.FirstName : "a"
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1486 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1487 group data by data.Value into groupedData
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1488 select new
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1489 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1490 groupedData.Key,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1491 Count = groupedData.Count()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1492 },
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1493 from parent in db.Parent
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1494 from child in db.Person
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1495 where child.ID == parent.ParentID
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1496 let data = new
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1497 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1498 parent.Value1,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1499 Value = child.FirstName == "John" ? child.FirstName : "a"
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1500 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1501 group data by data.Value into groupedData
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1502 select new
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1503 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1504 groupedData.Key,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1505 Count = groupedData.Count()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1506 });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1507 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1508 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1509
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1510 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1511 public void GroupByDate([DataContexts] string context)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1512 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1513 using (var db = GetDataContext(context))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1514 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1515 AreEqual(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1516 from t in Types2
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1517 group t by new { t.DateTimeValue.Value.Month, t.DateTimeValue.Value.Year } into grp
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1518 select new
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1519 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1520 Total = grp.Sum(_ => _.MoneyValue),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1521 year = grp.Key.Year,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1522 month = grp.Key.Month
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1523 },
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1524 from t in db.Types2
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1525 group t by new { t.DateTimeValue.Value.Month, t.DateTimeValue.Value.Year } into grp
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1526 select new
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1527 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1528 Total = grp.Sum(_ => _.MoneyValue),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1529 year = grp.Key.Year,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1530 month = grp.Key.Month
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1531 });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1532 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1533 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1534 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1535 }