annotate UnitTests/Linq/SelectTest.cs @ 4:f757da6161a1

!bug 100 + 2h fixed gregression
author cin
date Sun, 24 Aug 2014 17:57:42 +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.Collections.Generic;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3 using System.Linq;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
4 using System.Windows.Forms;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
5
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
6 using NUnit.Framework;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
7
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
8 using BLToolkit.Data;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
9 using BLToolkit.Data.DataProvider;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
10 using BLToolkit.Data.Linq;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
11 using BLToolkit.DataAccess;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
12 using BLToolkit.Reflection;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
13 using BLToolkit.Mapping;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
14
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
15 namespace Data.Linq
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
16 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
17 using Model;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
18
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
19 [TestFixture]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
20 public class SelectTest : TestBase
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
21 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
22 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
23 public void SimpleDirect()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
24 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
25 TestJohn(db => db.Person);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
26 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
27
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
28 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
29 public void Simple()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
30 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
31 TestJohn(db => from p in db.Person select p);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
32 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
33
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
34 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
35 public void SimpleDouble()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
36 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
37 TestJohn(db => db.Person.Select(p => p).Select(p => p));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
38 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
39
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
40 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
41 public void New()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
42 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
43 var expected = from p in Person select new { p.ID, p.FirstName };
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
44
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
45 ForEachProvider(db =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
46 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
47 var result = from p in db.Person select new { p.ID, p.FirstName };
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
48 Assert.IsTrue(result.ToList().SequenceEqual(expected));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
49 });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
50 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
51
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
52 void NewParam(IQueryable<Person> table, int i)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
53 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
54 var expected = from p in Person select new { i, p.ID, p.FirstName };
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
55 var result = from p in table select new { i, p.ID, p.FirstName };
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
56
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
57 Assert.IsTrue(result.ToList().SequenceEqual(expected));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
58 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
59
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
60 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
61 public void NewParam()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
62 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
63 ForEachProvider(db => { for (var i = 0; i < 5; i++) NewParam(db.Person, i); });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
64 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
65
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
66 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
67 public void InitObject()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
68 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
69 TestJohn(db => from p in db.Person select new Person { ID = p.ID, FirstName = p.FirstName });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
70 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
71
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
72 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
73 public void NewObject()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
74 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
75 TestJohn(db => from p in db.Person select new Person(p.ID, p.FirstName));
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 NewInitObject()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
80 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
81 TestJohn(db => from p in db.Person select new Person(p.ID) { FirstName = p.FirstName });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
82 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
83
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
84 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
85 public void NewWithExpr()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
86 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
87 TestPerson(1, "John1", db => from p in db.Person select new Person(p.ID) { FirstName = (p.FirstName + "1\r\r\r").TrimEnd('\r') });
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 MultipleSelect1()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
92 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
93 TestJohn(db => db.Person
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
94 .Select(p => new { PersonID = p.ID, Name = p.FirstName })
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
95 .Select(p => new Person(p.PersonID) { FirstName = p.Name }));
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 MultipleSelect2()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
100 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
101 TestJohn(db =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
102 from p in db.Person
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
103 select new { PersonID = p.ID, Name = p.FirstName } into pp
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
104 select new Person(pp.PersonID) { FirstName = pp.Name });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
105 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
106
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
107 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
108 public void MultipleSelect3()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
109 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
110 TestJohn(db => db.Person
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
111 .Select(p => new { PersonID = p.ID, Name = p.FirstName })
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
112 .Select(p => new Person { ID = p.PersonID, FirstName = p.Name })
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
113 .Select(p => new { PersonID = p.ID, Name = p.FirstName })
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
114 .Select(p => new Person { ID = p.PersonID, FirstName = p.Name }));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
115 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
116
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
117 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
118 public void MultipleSelect4()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
119 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
120 TestJohn(db => db.Person
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
121 .Select(p1 => new { p1 })
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
122 .Select(p2 => new { p2 })
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
123 .Select(p3 => new Person { ID = p3.p2.p1.ID, FirstName = p3.p2.p1.FirstName }));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
124 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
125
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
126 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
127 public void MultipleSelect5()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
128 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
129 TestJohn(db => db.Person
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
130 .Select(p1 => new { p1 })
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
131 .Select(p2 => new Person { ID = p2.p1.ID, FirstName = p2.p1.FirstName })
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
132 .Select(p3 => new { p3 })
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
133 .Select(p4 => new Person { ID = p4.p3.ID, FirstName = p4.p3.FirstName }));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
134 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
135
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
136 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
137 public void MultipleSelect6()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
138 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
139 TestJohn(db => db.Person
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
140 .Select(p1 => new { p1 })
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
141 .Select(p2 => new Person { ID = p2.p1.ID, FirstName = p2.p1.FirstName })
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
142 .Select(p3 => p3)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
143 .Select(p4 => new Person { ID = p4.ID, FirstName = p4.FirstName }));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
144 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
145
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
146 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
147 public void MultipleSelect7()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
148 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
149 TestJohn(db => db.Person
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
150 .Select(p1 => new { ID = p1.ID + 1, p1.FirstName })
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
151 .Select(p2 => new Person { ID = p2.ID - 1, FirstName = p2.FirstName }));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
152 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
153
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
154 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
155 public void MultipleSelect8()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
156 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
157 ForEachProvider(db =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
158 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
159 var person = (
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
160
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
161 db.Person
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
162 .Select(p1 => new Person { ID = p1.ID * 2, FirstName = p1.FirstName })
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
163 .Select(p2 => new { ID = p2.ID / "22".Length, p2.FirstName })
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
164
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
165 ).ToList().Where(p => p.ID == 1).First();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
166 Assert.AreEqual(1, person.ID);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
167 Assert.AreEqual("John", person.FirstName);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
168 });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
169 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
170
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
171 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
172 public void MultipleSelect9()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
173 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
174 TestJohn(db => db.Person
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
175 .Select(p1 => new { ID = p1.ID - 1, p1.FirstName })
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
176 .Select(p2 => new Person { ID = p2.ID + 1, FirstName = p2.FirstName })
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
177 .Select(p3 => p3)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
178 .Select(p4 => new { ID = p4.ID * "22".Length, p4.FirstName })
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
179 .Select(p5 => new Person { ID = p5.ID / 2, FirstName = p5.FirstName }));
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 MultipleSelect10()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
184 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
185 TestJohn(db => db.Person
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
186 .Select(p1 => new { p1.ID, p1 })
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
187 .Select(p2 => new { p2.ID, p2.p1, p2 })
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
188 .Select(p3 => new { p3.ID, p3.p1.FirstName, p11 = p3.p2.p1, p3 })
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
189 .Select(p4 => new Person { ID = p4.p11.ID, FirstName = p4.p3.p1.FirstName }));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
190 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
191
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
192 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
193 public void MultipleSelect11([IncludeDataContexts("Sql2008", "Sql2012")] string context)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
194 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
195 var dt = DateTime.Now;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
196
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
197 using (var db = new TestDbManager(context))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
198 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
199 var q =
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
200 from p in db.Parent
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
201 from g1 in p.GrandChildren.DefaultIfEmpty()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
202 let c1 = g1.Child.ChildID
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
203 where c1 == 1
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
204 from g2 in p.GrandChildren.DefaultIfEmpty()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
205 let c2 = g2.Child.ChildID
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
206 where c2 == 2
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
207 from g3 in p.GrandChildren.DefaultIfEmpty()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
208 let c3 = g3.Child.ChildID
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
209 where c3 == 3
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
210 from g4 in p.GrandChildren.DefaultIfEmpty()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
211 let c4 = g4.Child.ChildID
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
212 where c4 == 4
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
213 from g5 in p.GrandChildren.DefaultIfEmpty()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
214 let c5 = g5.Child.ChildID
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
215 where c5 == 5
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
216 from g6 in p.GrandChildren.DefaultIfEmpty()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
217 let c6 = g6.Child.ChildID
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
218 where c6 == 6
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
219 from g7 in p.GrandChildren.DefaultIfEmpty()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
220 let c7 = g7.Child.ChildID
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
221 where c7 == 7
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
222 from g8 in p.GrandChildren.DefaultIfEmpty()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
223 let c8 = g8.Child.ChildID
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
224 where c8 == 8
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
225 from g9 in p.GrandChildren.DefaultIfEmpty()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
226 let c9 = g9.Child.ChildID
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
227 where c9 == 9
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
228 from g10 in p.GrandChildren.DefaultIfEmpty()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
229 let c10 = g10.Child.ChildID
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
230 where c10 == 10
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
231 from g11 in p.GrandChildren.DefaultIfEmpty()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
232 let c11 = g11.Child.ChildID
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
233 where c11 == 11
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
234 from g12 in p.GrandChildren.DefaultIfEmpty()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
235 let c12 = g12.Child.ChildID
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
236 where c12 == 12
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
237 from g13 in p.GrandChildren.DefaultIfEmpty()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
238 let c13 = g13.Child.ChildID
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
239 where c13 == 13
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
240 from g14 in p.GrandChildren.DefaultIfEmpty()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
241 let c14 = g14.Child.ChildID
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
242 where c14 == 14
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
243 from g15 in p.GrandChildren.DefaultIfEmpty()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
244 let c15 = g15.Child.ChildID
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
245 where c15 == 15
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
246 from g16 in p.GrandChildren.DefaultIfEmpty()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
247 let c16 = g16.Child.ChildID
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
248 where c16 == 16
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
249 from g17 in p.GrandChildren.DefaultIfEmpty()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
250 let c17 = g17.Child.ChildID
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
251 where c17 == 17
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
252 from g18 in p.GrandChildren.DefaultIfEmpty()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
253 let c18 = g18.Child.ChildID
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
254 where c18 == 18
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
255 from g19 in p.GrandChildren.DefaultIfEmpty()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
256 let c19 = g19.Child.ChildID
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
257 where c19 == 19
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
258 from g20 in p.GrandChildren.DefaultIfEmpty()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
259 let c20 = g20.Child.ChildID
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
260 where c20 == 20
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
261 orderby c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15, c16, c17, c18, c19, c20
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
262 select new
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
263 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
264 p,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
265 cs = new [] { c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15, c16, c17, c18, c19, c20 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
266 };
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
267
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
268 q.ToList();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
269 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
270
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
271 Assert.IsTrue((DateTime.Now - dt).TotalSeconds < 30);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
272 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
273
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
274 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
275 public void MutiplySelect12([DataContexts(ExcludeLinqService = true)] string context)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
276 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
277 using (var db = (TestDbManager)GetDataContext(context))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
278 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
279 var q =
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
280 from grandChild in db.GrandChild
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
281 from child in db.Child
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
282 where grandChild.ChildID.HasValue
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
283 select grandChild;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
284 q.ToList();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
285
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
286 var selectCount = db.LastQuery.Split(' ', '\t', '\n', '\r').Count(s => s.Equals("select", StringComparison.InvariantCultureIgnoreCase));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
287 Assert.AreEqual(1, selectCount, "Why do we need \"select from select\"??");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
288 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
289 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
290
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
291 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
292 public void Coalesce()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
293 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
294 ForEachProvider(db =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
295 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
296 var q = (
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
297
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
298 from p in db.Person
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
299 where p.ID == 1
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
300 select new
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
301 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
302 p.ID,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
303 FirstName = p.FirstName ?? "None",
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
304 MiddleName = p.MiddleName ?? "None"
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
305 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
306
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
307 ).ToList().First();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
308
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
309 Assert.AreEqual(1, q.ID);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
310 Assert.AreEqual("John", q.FirstName);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
311 Assert.AreEqual("None", q.MiddleName);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
312 });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
313 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
314
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
315 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
316 public void Coalesce2()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
317 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
318 ForEachProvider(db =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
319 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
320 var q = (
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
321
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
322 from p in db.Person
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
323 where p.ID == 1
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
324 select new
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
325 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
326 p.ID,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
327 FirstName = p.MiddleName ?? p.FirstName ?? "None",
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
328 LastName = p.LastName ?? p.FirstName ?? "None",
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
329 MiddleName = p.MiddleName ?? p.MiddleName ?? "None"
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
330 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
331
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
332 ).ToList().First();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
333
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
334 Assert.AreEqual(1, q.ID);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
335 Assert.AreEqual("John", q.FirstName);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
336 Assert.AreEqual("Pupkin", q.LastName);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
337 Assert.AreEqual("None", q.MiddleName);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
338 });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
339 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
340
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
341 class MyMapSchema : MappingSchema
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
342 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
343 public override void InitNullValues()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
344 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
345 base.InitNullValues();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
346 DefaultStringNullValue = null;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
347 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
348 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
349
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
350 static readonly MyMapSchema _myMapSchema = new MyMapSchema();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
351
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
352 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
353 public void Coalesce3()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
354 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
355 ForEachProvider(db =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
356 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
357 if (db is DbManager)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
358 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
359 ((DbManager)db).MappingSchema = _myMapSchema;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
360
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
361 var q = (
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
362
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
363 from p in db.Person
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
364 where p.ID == 1
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
365 select new
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
366 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
367 p.ID,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
368 FirstName = p.MiddleName ?? p.FirstName ?? "None",
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
369 LastName = p.LastName ?? p.FirstName ?? "None",
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
370 MiddleName = p.MiddleName ?? p.MiddleName ?? "None"
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
371 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
372
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
373 ).ToList().First();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
374
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
375 Assert.AreEqual(1, q.ID);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
376 Assert.AreEqual("John", q.FirstName);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
377 Assert.AreEqual("Pupkin", q.LastName);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
378 Assert.AreEqual("None", q.MiddleName);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
379 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
380 });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
381 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
382
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
383 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
384 public void Coalesce4()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
385 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
386 ForEachProvider(new[] { ProviderName.SqlCe }, db => AreEqual(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
387 from c in Child
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
388 select Sql.AsSql((from ch in Child where ch.ChildID == c.ChildID select ch.Parent.Value1).FirstOrDefault() ?? c.ChildID),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
389 from c in db.Child
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
390 select Sql.AsSql((from ch in db.Child where ch.ChildID == c.ChildID select ch.Parent.Value1).FirstOrDefault() ?? c.ChildID)));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
391 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
392
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
393 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
394 public void Coalesce5()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
395 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
396 ForEachProvider(new[] { ProviderName.SqlCe }, db => AreEqual(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
397 from p in Parent select Sql.AsSql(p.Children.Max(c => (int?)c.ChildID) ?? p.Value1),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
398 from p in db.Parent select Sql.AsSql(p.Children.Max(c => (int?)c.ChildID) ?? p.Value1)));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
399 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
400
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
401 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
402 public void Concatenation()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
403 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
404 ForEachProvider(db =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
405 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
406 var q = from p in db.Person where p.ID == 1 select new { p.ID, FirstName = "123" + p.FirstName + "456" };
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
407 var f = q.Where(p => p.FirstName == "123John456").ToList().First();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
408 Assert.AreEqual(1, f.ID);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
409 });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
410 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
411
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
412 IEnumerable<int> GetList(int i)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
413 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
414 yield return i;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
415 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
416
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
417 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
418 public void SelectEnumerable()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
419 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
420 ForEachProvider(db => AreEqual(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
421 from p in Parent select new { Max = GetList(p.ParentID).Max() },
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
422 from p in db.Parent select new { Max = GetList(p.ParentID).Max() }));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
423 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
424
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
425 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
426 public void ConstractClass()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
427 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
428 ForEachProvider(db =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
429 db.Parent.Select(f =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
430 new ListViewItem(new[] { "", f.ParentID.ToString(), f.Value1.ToString() })
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
431 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
432 Checked = true,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
433 ImageIndex = 0,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
434 Tag = f.ParentID
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
435 }).ToList());
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
436 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
437
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
438 static string ConvertString(string s, int? i, bool b, int n)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
439 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
440 return s + "." + i + "." + b + "." + n;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
441 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
442
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
443 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
444 public void Index()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
445 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
446 ForEachProvider(db =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
447 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
448 var q =
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
449 db.Child
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
450 .OrderByDescending(m => m.ChildID)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
451 .Where(m => m.Parent != null && m.ParentID > 0);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
452
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
453 var lines =
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
454 q.Select(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
455 (m, i) =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
456 ConvertString(m.Parent.ParentID.ToString(), m.ChildID, i % 2 == 0, i)).ToArray();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
457
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
458 Assert.AreEqual("7.77.True.0", lines[0]);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
459
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
460 q =
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
461 db.Child
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
462 .OrderByDescending(m => m.ChildID)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
463 .Where(m => m.Parent != null && m.ParentID > 0);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
464
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
465 lines =
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
466 q.Select(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
467 (m, i) =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
468 ConvertString(m.Parent.ParentID.ToString(), m.ChildID, i % 2 == 0, i)).ToArray();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
469
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
470 Assert.AreEqual("7.77.True.0", lines[0]);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
471 });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
472 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
473
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
474 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
475 public void InterfaceTest()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
476 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
477 ForEachProvider(db =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
478 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
479 var q = from p in db.Parent2 select new { p.ParentID, p.Value1 };
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
480 q.ToList();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
481 });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
482 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
483
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
484 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
485 public void ProjectionTest1()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
486 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
487 ForEachProvider(db => AreEqual(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
488 from c in Child select new { c.ChildID, ID = 0, ID1 = c.ParentID2.ParentID2, c.ParentID2.Value1, ID2 = c.ParentID },
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
489 from c in db.Child select new { c.ChildID, ID = 0, ID1 = c.ParentID2.ParentID2, c.ParentID2.Value1, ID2 = c.ParentID }));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
490 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
491
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
492 [TableName("Person")]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
493 [ObjectFactory(typeof(Factory))]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
494 public class TestPersonObject
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
495 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
496 public class Factory : IObjectFactory
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
497 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
498 #region IObjectFactory Members
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
499
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
500 public object CreateInstance(TypeAccessor typeAccessor, InitContext context)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
501 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
502 if (context == null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
503 throw new Exception("InitContext is null while mapping from DataReader!");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
504
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
505 return typeAccessor.CreateInstance();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
506 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
507
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
508 #endregion
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
509 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
510
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
511 public int PersonID;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
512 public string FirstName;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
513 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
514
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
515 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
516 public void ObjectFactoryTest()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
517 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
518 ForEachProvider(db => db.GetTable<TestPersonObject>().ToList());
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
519 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
520
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
521 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
522 public void ProjectionTest2()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
523 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
524 ForEachProvider(db => AreEqual(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
525 from p in Person select p.Patient,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
526 from p in db.Person select p.Patient));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
527 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
528
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
529 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
530 public void EqualTest1()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
531 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
532 ForEachProvider(db =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
533 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
534 var q = (from p in db.Parent select new { p1 = p, p2 = p }).First();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
535 Assert.AreSame(q.p1, q.p2);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
536 });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
537 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
538
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
539 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
540 public void SelectEnumOnClient()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
541 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
542 ForEachProvider(context =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
543 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
544 var arr = new List<Person> { new Person() };
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
545 var p = context.Person.Select(person => new { person.ID, Arr = arr.Take(1) }).FirstOrDefault();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
546
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
547 p.Arr.Single();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
548 });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
549 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
550
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
551 [TableName("Parent")]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
552 public class TestParent
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
553 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
554 [MapField("ParentID")] public int ParentID_;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
555 [MapField("Value1")] public int? Value1_;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
556 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
557
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
558 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
559 public void SelectField()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
560 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
561 using (var db = new TestDbManager())
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
562 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
563 var q =
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
564 from p in db.GetTable<TestParent>()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
565 select p.Value1_;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
566
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
567 var sql = q.ToString();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
568
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
569 Assert.That(sql.IndexOf("ParentID_"), Is.LessThan(0));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
570 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
571 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
572 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
573 }