annotate UnitTests/Linq/AssociationTest.cs @ 1:8f65451dc28f

Исправлена проблема с фабрикой и выборкой нескольких объектов в linq выражении
author cin
date Fri, 28 Mar 2014 01:04:56 +0400
parents f990fcb411a9
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1 using System;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2 using System.Linq;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
4 using BLToolkit.Data.DataProvider;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
5 using BLToolkit.Data.Linq;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
6 using BLToolkit.DataAccess;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
7 using BLToolkit.Mapping;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
8
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
9 using NUnit.Framework;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
10
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
11 namespace Data.Linq
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
12 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
13 using Model;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
14
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
15 [TestFixture]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
16 public class AssociationTest : TestBase
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
17 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
18 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
19 public void Test1()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
20 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
21 ForEachProvider(db => AreEqual(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
22 from ch in Child where ch.ParentID == 1 select new { ch, ch.Parent },
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
23 from ch in db.Child where ch.ParentID == 1 select new { ch, ch.Parent }));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
24 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
25
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
26 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
27 public void Test2()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
28 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
29 var expected =
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
30 from p in Parent
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
31 from ch in p.Children
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
32 where ch.ParentID < 4 || ch.ParentID >= 4
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
33 select new { p.ParentID, ch.ChildID };
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
34
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
35 ForEachProvider(db => AreEqual(expected,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
36 from p in db.Parent
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
37 from ch in p.Children
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
38 where ch.ParentID < 4 || ch.ParentID >= 4
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
39 select new { p.ParentID, ch.ChildID }));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
40 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
41
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
42 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
43 public void Test3()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
44 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
45 var expected =
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
46 from p in Parent
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
47 from ch in p.Children
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
48 where p.ParentID < 4 || p.ParentID >= 4
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
49 select new { p.ParentID };
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
50
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
51 ForEachProvider(db => AreEqual(expected,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
52 from p in db.Parent
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
53 from ch in p.Children
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
54 where p.ParentID < 4 || p.ParentID >= 4
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
55 select new { p.ParentID }));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
56 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
57
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
58 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
59 public void Test4()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
60 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
61 var expected =
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
62 from p in Parent
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
63 from ch in p.Children
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
64 where p.ParentID < 4 || p.ParentID >= 4
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
65 select new { p.ParentID, ch.ChildID };
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
66
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
67 ForEachProvider(db => AreEqual(expected,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
68 from p in db.Parent
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
69 from ch in p.Children
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
70 where p.ParentID < 4 || p.ParentID >= 4
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
71 select new { p.ParentID, ch.ChildID }));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
72 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
73
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
74 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
75 public void Test5()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
76 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
77 var expected =
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
78 from p in Parent
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
79 from ch in p.Children2
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
80 where ch.ParentID < 4 || ch.ParentID >= 4
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
81 select new { p.ParentID, ch.ChildID };
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
82
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
83 ForEachProvider(db => AreEqual(expected,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
84 from p in db.Parent
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
85 from ch in p.Children2
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
86 where ch.ParentID < 4 || ch.ParentID >= 4
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
87 select new { p.ParentID, ch.ChildID }));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
88 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
89
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
90 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
91 public void SelectMany1()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
92 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
93 ForEachProvider(db => AreEqual(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
94 Parent.SelectMany(p => p.Children.Select(ch => p)),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
95 db.Parent.SelectMany(p => p.Children.Select(ch => p))));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
96 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
97
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
98 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
99 public void SelectMany2()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
100 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
101 ForEachProvider(db => AreEqual(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
102 Parent.SelectMany(p => Child.Select(ch => p)),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
103 db.Parent.SelectMany(p => db.Child.Select(ch => p))));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
104 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
105
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
106 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
107 public void SelectMany3()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
108 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
109 ForEachProvider(new[] { ProviderName.Access }, db => AreEqual(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
110 Child
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
111 .GroupBy(ch => ch.Parent)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
112 .Where(g => g.Count() > 2)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
113 .SelectMany(g => g.Select(ch => ch.Parent)),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
114 db.Child
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
115 .GroupBy(ch => ch.Parent)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
116 .Where(g => g.Count() > 2)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
117 .SelectMany(g => g.Select(ch => ch.Parent))));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
118 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
119
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
120 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
121 public void SelectMany4()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
122 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
123 ForEachProvider(new[] { ProviderName.Access }, db => AreEqual(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
124 Child
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
125 .GroupBy(ch => ch.Parent)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
126 .Where(g => g.Count() > 2)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
127 .SelectMany(g => g.Select(ch => ch.Parent.ParentID)),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
128 db.Child
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
129 .GroupBy(ch => ch.Parent)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
130 .Where(g => g.Count() > 2)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
131 .SelectMany(g => g.Select(ch => ch.Parent.ParentID))));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
132 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
133
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
134 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
135 public void SelectMany5()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
136 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
137 ForEachProvider(db => AreEqual(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
138 Parent.SelectMany(p => p.Children.Select(ch => p.ParentID)),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
139 db.Parent.SelectMany(p => p.Children.Select(ch => p.ParentID))));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
140 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
141
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
142 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
143 public void LeftJoin1()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
144 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
145 ForEachProvider(db => AreEqual(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
146 from p in Parent from c in p.Children.DefaultIfEmpty() where p.ParentID >= 4 select new { p, c },
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
147 from p in db.Parent from c in p.Children.DefaultIfEmpty() where p.ParentID >= 4 select new { p, c }));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
148 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
149
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
150 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
151 public void LeftJoin2()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
152 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
153 ForEachProvider(db => AreEqual(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
154 from p in Parent from c in p.Children.DefaultIfEmpty() where p.ParentID >= 4 select new { c, p },
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
155 from p in db.Parent from c in p.Children.DefaultIfEmpty() where p.ParentID >= 4 select new { c, p }));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
156 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
157
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
158 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
159 public void GroupBy1()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
160 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
161 ForEachProvider(db => AreEqual(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
162 from ch in Child group ch by ch.Parent into g select g.Key,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
163 from ch in db.Child group ch by ch.Parent into g select g.Key));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
164 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
165
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
166 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
167 public void GroupBy2()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
168 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
169 ForEachProvider(db => AreEqual(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
170 (from ch in Child group ch by ch.Parent1).ToList().Select(g => g.Key),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
171 (from ch in db.Child group ch by ch.Parent1).ToList().Select(g => g.Key)));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
172 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
173
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
174 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
175 public void GroupBy3()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
176 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
177 ForEachProvider(db => AreEqual(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
178 from p in Parent group p by p.Types.DateTimeValue.Year into g select g.Key,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
179 from p in db.Parent group p by p.Types.DateTimeValue.Year into g select g.Key));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
180 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
181
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
182 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
183 public void GroupBy4()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
184 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
185 ForEachProvider(db => AreEqual(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
186 from p in Types group p by p.DateTimeValue.Year into g select g.Key,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
187 from p in db.Types group p by p.DateTimeValue.Year into g select g.Key));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
188 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
189
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
190 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
191 public void EqualsNull1([IncludeDataContexts("Northwind")] string context)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
192 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
193 using (var db = new NorthwindDB())
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
194 AreEqual(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
195 from employee in Employee where employee.ReportsToEmployee != null select employee.EmployeeID,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
196 from employee in db.Employee where employee.ReportsToEmployee != null select employee.EmployeeID);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
197 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
198
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
199 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
200 public void EqualsNull2([IncludeDataContexts("Northwind")] string context)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
201 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
202 using (var db = new NorthwindDB())
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
203 AreEqual(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
204 from employee in Employee where employee.ReportsToEmployee != null select employee,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
205 from employee in db.Employee where employee.ReportsToEmployee != null select employee);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
206 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
207
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
208 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
209 public void EqualsNull3([IncludeDataContexts("Northwind")] string context)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
210 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
211 using (var db = new NorthwindDB())
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
212 AreEqual(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
213 from employee in Employee where employee.ReportsToEmployee != null select new { employee.ReportsToEmployee, employee },
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
214 from employee in db.Employee where employee.ReportsToEmployee != null select new { employee.ReportsToEmployee, employee });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
215 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
216
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
217 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
218 public void StackOverflow1([IncludeDataContexts("Northwind")] string context)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
219 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
220 using (var db = new NorthwindDB())
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
221 Assert.AreEqual(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
222 (from employee in Employee where employee.Employees.Count > 0 select employee).FirstOrDefault(),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
223 (from employee in db.Employee where employee.Employees.Count > 0 select employee).FirstOrDefault());
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
224 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
225
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
226 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
227 public void StackOverflow2()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
228 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
229 ForEachProvider(new[] { ProviderName.SqlCe }, db => AreEqual(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
230 from p in Parent5 where p.Children.Count != 0 select p,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
231 from p in db.Parent5 where p.Children.Count != 0 select p));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
232 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
233
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
234 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
235 public void StackOverflow3()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
236 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
237 ForEachProvider(new[] { ProviderName.SqlCe },
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
238 db => AreEqual(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
239 from p in Parent5 where p.Children.Count() != 0 select p,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
240 from p in db.Parent5 where p.Children.Count() != 0 select p));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
241 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
242
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
243 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
244 public void StackOverflow4()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
245 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
246 ForEachProvider(new[] { ProviderName.SqlCe }, db => AreEqual(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
247 from p in Parent5 select new { p.Children.Count },
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
248 from p in db.Parent5 select new { p.Children.Count }));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
249 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
250
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
251 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
252 public void DoubleJoin()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
253 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
254 ForEachProvider(db => AreEqual(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
255 from g in GrandChild where g.Child.Parent.Value1 == 1 select g,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
256 from g in db.GrandChild where g.Child.Parent.Value1 == 1 select g));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
257 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
258
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
259 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
260 public void Projection1()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
261 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
262 ForEachProvider(db => AreEqual(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
263 from c in
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
264 from c in Child
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
265 where c.Parent.ParentID == 2
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
266 select c
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
267 join g in GrandChild on c.ParentID equals g.ParentID
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
268 where g.ChildID == 22
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
269 select new { c.Parent, c },
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
270 from c in
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
271 from c in db.Child
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
272 where c.Parent.ParentID == 2
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
273 select c
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
274 join g in db.GrandChild on c.ParentID equals g.ParentID
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
275 where g.ChildID == 22
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
276 select new { c.Parent, c }));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
277 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
278
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
279 [TableName("Parent")]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
280 public class Top
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
281 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
282 public int ParentID;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
283 public int? Value1;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
284
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
285 [Association(ThisKey = "ParentID", OtherKey = "ParentID", CanBeNull = true)]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
286 public Middle Middle { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
287 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
288
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
289 [TableName("Child")]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
290 public class Middle
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
291 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
292 [PrimaryKey] public int ParentID;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
293 [PrimaryKey] public int ChildID;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
294
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
295 [Association(ThisKey = "ChildID", OtherKey = "ChildID", CanBeNull = false)]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
296 public Bottom Bottom { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
297
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
298 [Association(ThisKey = "ChildID", OtherKey = "ChildID", CanBeNull = true)]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
299 public Bottom Bottom1 { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
300 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
301
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
302 [TableName("GrandChild")]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
303 public class Bottom
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
304 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
305 public int ParentID;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
306 public int ChildID;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
307 public int GrandChildID;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
308 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
309
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
310 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
311 public void TestTernary1([DataContexts(ProviderName.SQLite, ProviderName.Access)] string context)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
312 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
313 var ids = new[] { 1, 5 };
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
314
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
315 using (var db = GetDataContext(context))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
316 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
317 var q =
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
318 from t in db.GetTable<Top>()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
319 where ids.Contains(t.ParentID)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
320 orderby t.ParentID
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
321 select t.Middle == null ? null : t.Middle.Bottom;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
322
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
323 var list = q.ToList();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
324
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
325 Assert.NotNull(list[0]);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
326 Assert.Null (list[1]);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
327 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
328 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
329
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
330 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
331 public void TestTernary2()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
332 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
333 var ids = new[] { 1, 5 };
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
334
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
335 ForEachProvider(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
336 new[] { ProviderName.SQLite, ProviderName.Access },
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
337 db =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
338 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
339 var q =
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
340 from t in db.GetTable<Top>()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
341 where ids.Contains(t.ParentID)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
342 orderby t.ParentID
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
343 select t.Middle.Bottom;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
344
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
345 var list = q.ToList();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
346
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
347 Assert.NotNull(list[0]);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
348 Assert.Null (list[1]);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
349 });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
350 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
351
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
352 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
353 public void TestTernary3()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
354 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
355 var ids = new[] { 1, 5 };
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
356
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
357 ForEachProvider(db =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
358 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
359 var q =
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
360 from t in db.GetTable<Top>()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
361 where ids.Contains(t.ParentID)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
362 orderby t.ParentID
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
363 select t.Middle.Bottom1;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
364
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
365 var list = q.ToList();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
366
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
367 Assert.NotNull(list[0]);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
368 Assert.Null (list[1]);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
369 });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
370 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
371
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
372 [TableName("Child")]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
373 [InheritanceMapping(Code = 1, IsDefault = true, Type = typeof(ChildForHeirarhy))]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
374 public class ChildBaseForHeirarhy
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
375 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
376 [MapField(IsInheritanceDiscriminator = true)]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
377 public int ChildID { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
378 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
379
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
380 public class ChildForHeirarhy : ChildBaseForHeirarhy
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
381 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
382 public int ParentID { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
383 [Association(ThisKey = "ParentID", OtherKey = "ParentID", CanBeNull = true)]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
384 public Parent Parent { get; set; }
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 AssociationInHeirarhy()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
389 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
390 ForEachProvider(db =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
391 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
392 db.GetTable<ChildBaseForHeirarhy>()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
393 .OfType<ChildForHeirarhy>()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
394 .Select(ch => new ChildForHeirarhy { Parent = ch.Parent })
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
395 .ToList();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
396 });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
397 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
398
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
399 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
400 public void LetTest1()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
401 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
402 ForEachProvider(db =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
403 AreEqual(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
404 from p in Parent
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
405 let chs = p.Children
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
406 select new { p.ParentID, Count = chs.Count() },
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
407 from p in db.Parent
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
408 let chs = p.Children
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
409 select new { p.ParentID, Count = chs.Count() }));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
410 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
411
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
412 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
413 public void LetTest2()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
414 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
415 ForEachProvider(db =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
416 AreEqual(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
417 from p in Parent
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
418 select new { p } into p
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
419 let chs = p.p.Children
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
420 select new { p.p.ParentID, Count = chs.Count() },
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
421 from p in db.Parent
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
422 select new { p } into p
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
423 let chs = p.p.Children
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
424 select new { p.p.ParentID, Count = chs.Count() }));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
425 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
426 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
427 }