annotate UnitTests/Linq/ExpressionsTest.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.Linq;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3 using System.Linq.Expressions;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
4
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
5 using BLToolkit.Data.DataProvider;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
6 using BLToolkit.Data.Linq;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
7
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
8 using NUnit.Framework;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
9
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
10 namespace Data.Linq
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
11 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
12 using Model;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
13
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
14 [TestFixture]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
15 public class ExpressionsTest : TestBase
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
16 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
17 static int Count1(Parent p) { return p.Children.Count(c => c.ChildID > 0); }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
18
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
19 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
20 public void MapMember1()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
21 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
22 Expressions.MapMember<Parent,int>(p => Count1(p), p => p.Children.Count(c => c.ChildID > 0));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
23
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
24 ForEachProvider(db => AreEqual(Parent.Select(p => Count1(p)), db.Parent.Select(p => Count1(p))));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
25 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
26
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
27 static int Count2(Parent p, int id) { return p.Children.Count(c => c.ChildID > id); }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
28
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
29 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
30 public void MapMember2()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
31 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
32 Expressions.MapMember<Parent,int,int>((p,id) => Count2(p, id), (p, id) => p.Children.Count(c => c.ChildID > id));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
33
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
34 ForEachProvider(db => AreEqual(Parent.Select(p => Count2(p, 1)), db.Parent.Select(p => Count2(p, 1))));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
35 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
36
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
37 static int Count3(Parent p, int id) { return p.Children.Count(c => c.ChildID > id) + 2; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
38
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
39 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
40 public void MapMember3()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
41 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
42 Expressions.MapMember<Parent,int,int>((p,id) => Count3(p, id), (p, id) => p.Children.Count(c => c.ChildID > id) + 2);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
43
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
44 var n = 2;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
45
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
46 ForEachProvider(new[] { ProviderName.SqlCe }, db => AreEqual(Parent.Select(p => Count3(p, n)), db.Parent.Select(p => Count3(p, n))));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
47 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
48
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
49 [MethodExpression("Count4Expression")]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
50 static int Count4(Parent p, int id, int n)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
51 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
52 return (_count4Expression ?? (_count4Expression = Count4Expression().Compile()))(p, id, n);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
53 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
54
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
55 static Func<Parent,int,int,int> _count4Expression;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
56
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
57 static Expression<Func<Parent,int,int,int>> Count4Expression()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
58 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
59 return (p, id, n) => p.Children.Count(c => c.ChildID > id) + n;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
60 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
61
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
62 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
63 public void MethodExpression4()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
64 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
65 var n = 3;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
66
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
67 ForEachProvider(db => AreEqual(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
68 Parent.Select(p => Count4(p, n, 4)),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
69 db.Parent.Select(p => Count4(p, n, 4))));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
70 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
71
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
72 [MethodExpression("Count5Expression")]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
73 static int Count5(ITestDataContext db, Parent p, int n)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
74 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
75 return (_count5Expression ?? (_count5Expression = Count5Expression().Compile()))(db, p, n);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
76 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
77
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
78 static Func<ITestDataContext,Parent,int,int> _count5Expression;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
79
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
80 static Expression<Func<ITestDataContext,Parent,int,int>> Count5Expression()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
81 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
82 return (db, p, n) => Sql.AsSql(db.Child.Where(c => c.ParentID == p.ParentID).Count() + n);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
83 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
84
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
85 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
86 public void MethodExpression5()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
87 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
88 var n = 2;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
89
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
90 ForEachProvider(new[] { ProviderName.SqlCe, ProviderName.Firebird }, db => AreEqual(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
91 Parent.Select(p => Child.Where(c => c.ParentID == p.ParentID).Count() + n),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
92 db.Parent.Select(p => Count5(db, p, n))));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
93 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
94
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
95 [MethodExpression("Count6Expression")]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
96 static int Count6(Table<Child> c, Parent p)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
97 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
98 return (_count6Expression ?? (_count6Expression = Count6Expression().Compile()))(c, p);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
99 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
100
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
101 static Func<Table<Child>,Parent,int> _count6Expression;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
102
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
103 static Expression<Func<Table<Child>,Parent,int>> Count6Expression()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
104 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
105 return (ch, p) => ch.Where(c => c.ParentID == p.ParentID).Count();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
106 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
107
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
108 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
109 public void MethodExpression6()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
110 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
111 ForEachProvider(db => AreEqual(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
112 Parent.Select(p => Child.Where(c => c.ParentID == p.ParentID).Count()),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
113 db.Parent.Select(p => Count6(db.Child, p))));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
114 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
115
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
116 [MethodExpression("Count7Expression")]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
117 static int Count7(Table<Child> ch, Parent p, int n)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
118 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
119 return (_count7Expression ?? (_count7Expression = Count7Expression().Compile()))(ch, p, n);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
120 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
121
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
122 static Func<Table<Child>,Parent,int,int> _count7Expression;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
123
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
124 static Expression<Func<Table<Child>,Parent,int,int>> Count7Expression()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
125 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
126 return (ch, p, n) => Sql.AsSql(ch.Where(c => c.ParentID == p.ParentID).Count() + n);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
127 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
128
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
129 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
130 public void MethodExpression7()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
131 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
132 var n = 2;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
133
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
134 ForEachProvider(new[] { ProviderName.SqlCe, ProviderName.Firebird }, db => AreEqual(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
135 Parent.Select(p => Child.Where(c => c.ParentID == p.ParentID).Count() + n),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
136 db.Parent.Select(p => Count7(db.Child, p, n))));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
137 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
138
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
139 [MethodExpression("Expression8")]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
140 static IQueryable<Parent> GetParent(ITestDataContext db, Child ch)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
141 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
142 throw new InvalidOperationException();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
143 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
144
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
145 static Expression<Func<ITestDataContext,Child,IQueryable<Parent>>> Expression8()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
146 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
147 return (db,ch) =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
148 from p in db.Parent
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
149 where p.ParentID == (int)Math.Floor(ch.ChildID / 10.0)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
150 select p;
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 MethodExpression8()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
155 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
156 ForEachProvider(db => AreEqual(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
157 from ch in Child
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
158 from p in
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
159 from p in Parent
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
160 where p.ParentID == ch.ChildID / 10
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
161 select p
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
162 where ch.ParentID == p.ParentID
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
163 select ch
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
164 ,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
165 from ch in db.Child
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
166 from p in GetParent(db, ch)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
167 where ch.ParentID == p.ParentID
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
168 select ch));
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 MethodExpression9()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
173 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
174 using (var db = new TestDbManager())
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
175 AreEqual(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
176 from ch in Child
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
177 from p in
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
178 from p in Parent
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
179 where p.ParentID == ch.ChildID / 10
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
180 select p
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
181 where ch.ParentID == p.ParentID
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
182 select ch
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
183 ,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
184 from ch in db.Child
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
185 from p in TestDbManager.GetParent9(db, ch)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
186 where ch.ParentID == p.ParentID
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
187 select ch);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
188 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
189
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
190 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
191 public void MethodExpression10()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
192 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
193 using (var db = new TestDbManager())
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
194 AreEqual(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
195 from ch in Child
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
196 from p in
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
197 from p in Parent
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
198 where p.ParentID == ch.ChildID / 10
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
199 select p
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
200 where ch.ParentID == p.ParentID
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
201 select ch
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
202 ,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
203 from ch in db.Child
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
204 from p in db.GetParent10(ch)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
205 where ch.ParentID == p.ParentID
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
206 select ch);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
207 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
208
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
209 [MethodExpression("GetBoolExpression1")]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
210 static bool GetBool1<T>(T obj)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
211 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
212 throw new InvalidOperationException();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
213 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
214
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
215 static Expression<Func<T,bool>> GetBoolExpression1<T>()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
216 where T : class
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
217 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
218 return obj => obj != null;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
219 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
220
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
221 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
222 public void TestGenerics1()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
223 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
224 using (var db = new TestDbManager())
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
225 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
226 var q =
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
227 from ch in db.Child
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
228 where GetBool1(ch.Parent)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
229 select ch;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
230
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
231 q.ToList();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
232 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
233 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
234
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
235 [MethodExpression("GetBoolExpression2_{0}")]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
236 static bool GetBool2<T>(T obj)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
237 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
238 throw new InvalidOperationException();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
239 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
240
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
241 static Expression<Func<Parent,bool>> GetBoolExpression2_Parent()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
242 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
243 return obj => obj != null;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
244 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
245
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
246 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
247 public void TestGenerics2()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
248 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
249 using (var db = new TestDbManager())
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
250 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
251 var q =
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
252 from ch in db.Child
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
253 where GetBool2(ch.Parent)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
254 select ch;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
255
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
256 q.ToList();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
257 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
258 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
259
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
260 class TestClass<T>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
261 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
262 [MethodExpression("GetBoolExpression3")]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
263 public static bool GetBool3(Parent obj)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
264 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
265 throw new InvalidOperationException();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
266 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
267
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
268 static Expression<Func<Parent,bool>> GetBoolExpression3()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
269 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
270 return obj => obj != null;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
271 }
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 TestGenerics3()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
276 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
277 using (var db = new TestDbManager())
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
278 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
279 var q =
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
280 from ch in db.Child
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
281 where TestClass<int>.GetBool3(ch.Parent)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
282 select ch;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
283
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
284 q.ToList();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
285 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
286 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
287 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
288 }