annotate UnitTests/Linq/SelectTest.cs.orig @ 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 using BLToolkit.DataAccess;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
6 using BLToolkit.Reflection;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
7 using NUnit.Framework;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
8
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
9 using BLToolkit.Data;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
10 using BLToolkit.Data.DataProvider;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
11 using BLToolkit.Data.Linq;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
12 using BLToolkit.Mapping;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
13
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
14 namespace Data.Linq
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
15 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
16 using Model;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
17
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
18 [TestFixture]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
19 public class SelectTest : TestBase
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
20 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
21 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
22 public void SimpleDirect()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
23 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
24 TestJohn(db => db.Person);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
25 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
26
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
27 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
28 public void Simple()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
29 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
30 TestJohn(db => from p in db.Person select p);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
31 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
32
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
33 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
34 public void SimpleDouble()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
35 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
36 TestJohn(db => db.Person.Select(p => p).Select(p => p));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
37 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
38
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
39 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
40 public void New()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
41 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
42 var expected = from p in Person select new { p.ID, p.FirstName };
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
43
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
44 ForEachProvider(db =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
45 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
46 var result = from p in db.Person select new { p.ID, p.FirstName };
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
47 Assert.IsTrue(result.ToList().SequenceEqual(expected));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
48 });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
49 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
50
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
51 void NewParam(IQueryable<Person> table, int i)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
52 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
53 var expected = from p in Person select new { i, p.ID, p.FirstName };
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
54 var result = from p in table select new { i, p.ID, p.FirstName };
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
55
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
56 Assert.IsTrue(result.ToList().SequenceEqual(expected));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
57 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
58
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
59 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
60 public void NewParam()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
61 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
62 ForEachProvider(db => { for (int i = 0; i < 5; i++) NewParam(db.Person, i); });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
63 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
64
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
65 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
66 public void InitObject()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
67 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
68 TestJohn(db => from p in db.Person select new Person { ID = p.ID, FirstName = p.FirstName });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
69 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
70
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
71 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
72 public void NewObject()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
73 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
74 TestJohn(db => from p in db.Person select new Person(p.ID, p.FirstName));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
75 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
76
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
77 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
78 public void NewInitObject()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
79 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
80 TestJohn(db => from p in db.Person select new Person(p.ID) { FirstName = p.FirstName });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
81 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
82
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
83 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
84 public void NewWithExpr()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
85 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
86 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
87 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
88
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
89 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
90 public void MultipleSelect1()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
91 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
92 TestJohn(db => db.Person
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
93 .Select(p => new { PersonID = p.ID, Name = p.FirstName })
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
94 .Select(p => new Person(p.PersonID) { FirstName = p.Name }));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
95 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
96
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
97 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
98 public void MultipleSelect2()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
99 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
100 TestJohn(db =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
101 from p in db.Person
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
102 select new { PersonID = p.ID, Name = p.FirstName } into pp
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
103 select new Person(pp.PersonID) { FirstName = pp.Name });
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 MultipleSelect3()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
108 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
109 TestJohn(db => db.Person
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
110 .Select(p => new { PersonID = p.ID, Name = p.FirstName })
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
111 .Select(p => new Person { ID = p.PersonID, FirstName = p.Name })
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
112 .Select(p => new { PersonID = p.ID, Name = p.FirstName })
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
113 .Select(p => new Person { ID = p.PersonID, FirstName = p.Name }));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
114 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
115
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
116 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
117 public void MultipleSelect4()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
118 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
119 TestJohn(db => db.Person
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
120 .Select(p1 => new { p1 })
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
121 .Select(p2 => new { p2 })
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
122 .Select(p3 => new Person { ID = p3.p2.p1.ID, FirstName = p3.p2.p1.FirstName }));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
123 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
124
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
125 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
126 public void MultipleSelect5()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
127 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
128 TestJohn(db => db.Person
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
129 .Select(p1 => new { p1 })
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
130 .Select(p2 => new Person { ID = p2.p1.ID, FirstName = p2.p1.FirstName })
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
131 .Select(p3 => new { p3 })
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
132 .Select(p4 => new Person { ID = p4.p3.ID, FirstName = p4.p3.FirstName }));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
133 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
134
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
135 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
136 public void MultipleSelect6()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
137 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
138 TestJohn(db => db.Person
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
139 .Select(p1 => new { p1 })
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
140 .Select(p2 => new Person { ID = p2.p1.ID, FirstName = p2.p1.FirstName })
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
141 .Select(p3 => p3)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
142 .Select(p4 => new Person { ID = p4.ID, FirstName = p4.FirstName }));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
143 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
144
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
145 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
146 public void MultipleSelect7()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
147 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
148 TestJohn(db => db.Person
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
149 .Select(p1 => new { ID = p1.ID + 1, p1.FirstName })
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
150 .Select(p2 => new Person { ID = p2.ID - 1, FirstName = p2.FirstName }));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
151 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
152
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
153 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
154 public void MultipleSelect8()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
155 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
156 ForEachProvider(db =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
157 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
158 var person = (
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
159
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
160 db.Person
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
161 .Select(p1 => new Person { ID = p1.ID * 2, FirstName = p1.FirstName })
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
162 .Select(p2 => new { ID = p2.ID / "22".Length, p2.FirstName })
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
163
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
164 ).ToList().Where(p => p.ID == 1).First();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
165 Assert.AreEqual(1, person.ID);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
166 Assert.AreEqual("John", person.FirstName);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
167 });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
168 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
169
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
170 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
171 public void MultipleSelect9()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
172 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
173 TestJohn(db => db.Person
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
174 .Select(p1 => new { ID = p1.ID - 1, p1.FirstName })
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
175 .Select(p2 => new Person { ID = p2.ID + 1, FirstName = p2.FirstName })
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
176 .Select(p3 => p3)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
177 .Select(p4 => new { ID = p4.ID * "22".Length, p4.FirstName })
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
178 .Select(p5 => new Person { ID = p5.ID / 2, FirstName = p5.FirstName }));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
179 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
180
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
181 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
182 public void MultipleSelect10()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
183 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
184 TestJohn(db => db.Person
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
185 .Select(p1 => new { p1.ID, p1 })
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
186 .Select(p2 => new { p2.ID, p2.p1, p2 })
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
187 .Select(p3 => new { p3.ID, p3.p1.FirstName, p11 = p3.p2.p1, p3 })
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
188 .Select(p4 => new Person { ID = p4.p11.ID, FirstName = p4.p3.p1.FirstName }));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
189 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
190
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
191 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
192 public void Coalesce()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
193 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
194 ForEachProvider(db =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
195 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
196 var q = (
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
197
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
198 from p in db.Person
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
199 where p.ID == 1
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
200 select new
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
201 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
202 p.ID,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
203 FirstName = p.FirstName ?? "None",
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
204 MiddleName = p.MiddleName ?? "None"
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
205 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
206
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
207 ).ToList().First();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
208
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
209 Assert.AreEqual(1, q.ID);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
210 Assert.AreEqual("John", q.FirstName);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
211 Assert.AreEqual("None", q.MiddleName);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
212 });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
213 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
214
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
215 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
216 public void Coalesce2()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
217 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
218 ForEachProvider(db =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
219 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
220 var q = (
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
221
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
222 from p in db.Person
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
223 where p.ID == 1
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
224 select new
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
225 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
226 p.ID,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
227 FirstName = p.MiddleName ?? p.FirstName ?? "None",
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
228 LastName = p.LastName ?? p.FirstName ?? "None",
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
229 MiddleName = p.MiddleName ?? p.MiddleName ?? "None"
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
230 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
231
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
232 ).ToList().First();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
233
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
234 Assert.AreEqual(1, q.ID);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
235 Assert.AreEqual("John", q.FirstName);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
236 Assert.AreEqual("Pupkin", q.LastName);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
237 Assert.AreEqual("None", q.MiddleName);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
238 });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
239 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
240
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
241 class MyMapSchema : MappingSchema
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
242 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
243 public override void InitNullValues()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
244 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
245 base.InitNullValues();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
246 DefaultStringNullValue = null;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
247 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
248 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
249
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
250 static readonly MyMapSchema _myMapSchema = new MyMapSchema();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
251
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
252 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
253 public void Coalesce3()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
254 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
255 ForEachProvider(db =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
256 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
257 if (db is DbManager)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
258 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
259 ((DbManager)db).MappingSchema = _myMapSchema;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
260
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
261 var q = (
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
262
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
263 from p in db.Person
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
264 where p.ID == 1
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
265 select new
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
266 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
267 p.ID,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
268 FirstName = p.MiddleName ?? p.FirstName ?? "None",
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
269 LastName = p.LastName ?? p.FirstName ?? "None",
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
270 MiddleName = p.MiddleName ?? p.MiddleName ?? "None"
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
271 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
272
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
273 ).ToList().First();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
274
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
275 Assert.AreEqual(1, q.ID);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
276 Assert.AreEqual("John", q.FirstName);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
277 Assert.AreEqual("Pupkin", q.LastName);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
278 Assert.AreEqual("None", q.MiddleName);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
279 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
280 });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
281 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
282
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
283 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
284 public void Coalesce4()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
285 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
286 ForEachProvider(new[] { ProviderName.SqlCe }, db => AreEqual(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
287 from c in Child
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
288 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
289 from c in db.Child
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
290 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
291 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
292
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
293 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
294 public void Coalesce5()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
295 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
296 ForEachProvider(new[] { ProviderName.SqlCe }, db => AreEqual(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
297 from p in Parent select Sql.AsSql(p.Children.Max(c => (int?)c.ChildID) ?? p.Value1),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
298 from p in db.Parent select Sql.AsSql(p.Children.Max(c => (int?)c.ChildID) ?? p.Value1)));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
299 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
300
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
301 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
302 public void Concatenation()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
303 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
304 ForEachProvider(db =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
305 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
306 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
307 var f = q.Where(p => p.FirstName == "123John456").ToList().First();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
308 Assert.AreEqual(1, f.ID);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
309 });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
310 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
311
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
312 IEnumerable<int> GetList(int i)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
313 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
314 yield return i;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
315 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
316
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
317 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
318 public void SelectEnumerable()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
319 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
320 ForEachProvider(db => AreEqual(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
321 from p in Parent select new { Max = GetList(p.ParentID).Max() },
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
322 from p in db.Parent select new { Max = GetList(p.ParentID).Max() }));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
323 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
324
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
325 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
326 public void ConstractClass()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
327 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
328 ForEachProvider(db =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
329 db.Parent.Select(f =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
330 new ListViewItem(new[] { "", f.ParentID.ToString(), f.Value1.ToString() })
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
331 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
332 Checked = true,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
333 ImageIndex = 0,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
334 Tag = f.ParentID
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
335 }).ToList());
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
336 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
337
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
338 static string ConvertString(string s, int? i, bool b, int n)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
339 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
340 return s + "." + i + "." + b + "." + n;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
341 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
342
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
343 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
344 public void Index()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
345 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
346 ForEachProvider(db =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
347 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
348 var q =
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
349 db.Child
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
350 .OrderByDescending(m => m.ChildID)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
351 .Where(m => m.Parent != null && m.ParentID > 0);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
352
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
353 var lines =
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
354 q.Select(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
355 (m, i) =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
356 ConvertString(m.Parent.ParentID.ToString(), m.ChildID, i % 2 == 0, i)).ToArray();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
357
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
358 Assert.AreEqual("7.77.True.0", lines[0]);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
359 });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
360 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
361
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
362 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
363 public void InterfaceTest()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
364 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
365 ForEachProvider(db =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
366 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
367 var q = from p in db.Parent2 select new { p.ParentID, p.Value1 };
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
368 q.ToList();
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 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
373 public void ProjectionTest1()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
374 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
375 ForEachProvider(db => AreEqual(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
376 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
377 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
378 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
379
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
380 <<<<<<< HEAD
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
381 [TableName("Person")]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
382 [ObjectFactory(typeof(TestPersonObject.Factory))]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
383 public class TestPersonObject
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
384 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
385 public class Factory : IObjectFactory
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
386 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
387 #region IObjectFactory Members
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
388
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
389 public object CreateInstance(TypeAccessor typeAccessor, InitContext context)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
390 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
391 if (context == null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
392 throw new Exception("InitContext is null while mapping from DataReader!");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
393
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
394 return typeAccessor.CreateInstance();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
395 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
396
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
397 #endregion
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
398 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
399 public int PersonID;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
400 public string FirstName;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
401 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
402
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
403 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
404 public void ObjectFactoryTest()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
405 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
406 ForEachProvider(db =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
407 db.GetTable<TestPersonObject>().ToList());
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
408 =======
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
409 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
410 public void ProjectionTest2()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
411 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
412 ForEachProvider(db => AreEqual(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
413 from p in Person select p.Patient,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
414 from p in db.Person select p.Patient));
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 EqualTest1()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
419 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
420 ForEachProvider(db =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
421 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
422 var q = (from p in db.Parent select new { p1 = p, p2 = p }).First();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
423 Assert.AreSame(q.p1, q.p2);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
424 });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
425 >>>>>>> 5ec55e61b6c00e47619c1399483bd531f161f93a
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
426 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
427 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
428 }