annotate Source/Data/Linq/Builder/UpdateBuilder.cs @ 6:11b6da379593

Исправлена странная ошибка при использовании OfType<...>().Where(...)
author cin
date Mon, 05 Dec 2016 05:50:52 +0300
parents f990fcb411a9
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1 using System;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2 using System.Collections.Generic;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3 using System.Linq;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
4 using System.Linq.Expressions;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
5 using System.Reflection;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
6
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
7 namespace BLToolkit.Data.Linq.Builder
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
8 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
9 using BLToolkit.Linq;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
10 using Data.Sql;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
11 using Reflection;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
12
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
13 class UpdateBuilder : MethodCallBuilder
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
14 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
15 #region Update
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
16
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
17 protected override bool CanBuildMethodCall(ExpressionBuilder builder, MethodCallExpression methodCall, BuildInfo buildInfo)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
18 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
19 return methodCall.IsQueryable("Update");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
20 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
21
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
22 protected override IBuildContext BuildMethodCall(ExpressionBuilder builder, MethodCallExpression methodCall, BuildInfo buildInfo)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
23 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
24 var sequence = builder.BuildSequence(new BuildInfo(buildInfo, methodCall.Arguments[0]));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
25
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
26 switch (methodCall.Arguments.Count)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
27 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
28 case 1 : // int Update<T>(this IUpdateable<T> source)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
29 CheckAssociation(sequence);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
30 break;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
31
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
32 case 2 : // int Update<T>(this IQueryable<T> source, Expression<Func<T,T>> setter)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
33 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
34 CheckAssociation(sequence);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
35
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
36 BuildSetter(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
37 builder,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
38 buildInfo,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
39 (LambdaExpression)methodCall.Arguments[1].Unwrap(),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
40 sequence,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
41 sequence.SqlQuery.Update.Items,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
42 sequence);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
43 break;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
44 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
45
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
46 case 3 :
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
47 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
48 var expr = methodCall.Arguments[1].Unwrap();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
49
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
50 if (expr is LambdaExpression)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
51 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
52 // int Update<T>(this IQueryable<T> source, Expression<Func<T,bool>> predicate, Expression<Func<T,T>> setter)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
53 //
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
54 sequence = builder.BuildWhere(buildInfo.Parent, sequence, (LambdaExpression)methodCall.Arguments[1].Unwrap(), false);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
55
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
56 CheckAssociation(sequence);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
57
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
58 BuildSetter(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
59 builder,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
60 buildInfo,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
61 (LambdaExpression)methodCall.Arguments[2].Unwrap(),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
62 sequence,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
63 sequence.SqlQuery.Update.Items,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
64 sequence);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
65 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
66 else
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
67 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
68 // static int Update<TSource,TTarget>(this IQueryable<TSource> source, Table<TTarget> target, Expression<Func<TSource,TTarget>> setter)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
69 //
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
70 var into = builder.BuildSequence(new BuildInfo(buildInfo, expr, new SqlQuery()));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
71
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
72 sequence.ConvertToIndex(null, 0, ConvertFlags.All);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
73 sequence.SqlQuery.ResolveWeakJoins(new List<ISqlTableSource>());
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
74 sequence.SqlQuery.Select.Columns.Clear();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
75
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
76 BuildSetter(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
77 builder,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
78 buildInfo,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
79 (LambdaExpression)methodCall.Arguments[2].Unwrap(),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
80 into,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
81 sequence.SqlQuery.Update.Items,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
82 sequence);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
83
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
84 var sql = sequence.SqlQuery;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
85
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
86 sql.Select.Columns.Clear();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
87
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
88 foreach (var item in sql.Update.Items)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
89 sql.Select.Columns.Add(new SqlQuery.Column(sql, item.Expression));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
90
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
91 sql.Update.Table = ((TableBuilder.TableContext)into).SqlTable;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
92 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
93
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
94 break;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
95 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
96 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
97
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
98 sequence.SqlQuery.QueryType = QueryType.Update;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
99
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
100 return new UpdateContext(buildInfo.Parent, sequence);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
101 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
102
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
103 static void CheckAssociation(IBuildContext sequence)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
104 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
105 var ctx = sequence as SelectContext;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
106
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
107 if (ctx != null && ctx.IsScalar)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
108 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
109 var res = ctx.IsExpression(null, 0, RequestFor.Association);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
110
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
111 if (res.Result && res.Context is TableBuilder.AssociatedTableContext)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
112 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
113 var atc = (TableBuilder.AssociatedTableContext)res.Context;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
114 sequence.SqlQuery.Update.Table = atc.SqlTable;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
115 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
116 else
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
117 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
118 res = ctx.IsExpression(null, 0, RequestFor.Table);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
119
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
120 if (res.Result && res.Context is TableBuilder.TableContext)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
121 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
122 var tc = (TableBuilder.TableContext)res.Context;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
123
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
124 if (sequence.SqlQuery.From.Tables.Count == 0 || sequence.SqlQuery.From.Tables[0].Source != tc.SqlQuery)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
125 sequence.SqlQuery.Update.Table = tc.SqlTable;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
126 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
127 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
128 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
129 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
130
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
131 protected override SequenceConvertInfo Convert(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
132 ExpressionBuilder builder, MethodCallExpression methodCall, BuildInfo buildInfo, ParameterExpression param)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
133 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
134 return null;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
135 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
136
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
137 #endregion
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
138
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
139 #region Helpers
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
140
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
141 internal static void BuildSetter(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
142 ExpressionBuilder builder,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
143 BuildInfo buildInfo,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
144 LambdaExpression setter,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
145 IBuildContext into,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
146 List<SqlQuery.SetExpression> items,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
147 IBuildContext sequence)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
148 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
149 var path = Expression.Parameter(setter.Body.Type, "p");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
150 var ctx = new ExpressionContext(buildInfo.Parent, sequence, setter);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
151
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
152 if (setter.Body.NodeType == ExpressionType.MemberInit)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
153 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
154 var ex = (MemberInitExpression)setter.Body;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
155 var p = sequence.Parent;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
156
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
157 BuildSetter(builder, into, items, ctx, ex, path);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
158
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
159 builder.ReplaceParent(ctx, p);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
160 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
161 else
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
162 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
163 var sqlInfo = ctx.ConvertToSql(setter.Body, 0, ConvertFlags.All);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
164
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
165 foreach (var info in sqlInfo)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
166 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
167 if (info.Members.Count == 0)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
168 throw new LinqException("Object initializer expected for insert statement.");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
169
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
170 if (info.Members.Count != 1)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
171 throw new InvalidOperationException();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
172
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
173 var member = info.Members[0];
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
174 var pe = Expression.MakeMemberAccess(path, member);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
175 var column = into.ConvertToSql(pe, 1, ConvertFlags.Field);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
176 var expr = info.Sql;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
177
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
178 if (expr is SqlParameter)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
179 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
180 var type = member.MemberType == MemberTypes.Field ?
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
181 ((FieldInfo) member).FieldType :
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
182 ((PropertyInfo)member).PropertyType;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
183
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
184 if (TypeHelper.IsEnumOrNullableEnum(type))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
185 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
186 var memberAccessor = TypeAccessor.GetAccessor(member.DeclaringType)[member.Name];
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
187 ((SqlParameter)expr).SetEnumConverter(memberAccessor, builder.MappingSchema);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
188 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
189 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
190
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
191 items.Add(new SqlQuery.SetExpression(column[0].Sql, expr));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
192 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
193 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
194 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
195
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
196 static void BuildSetter(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
197 ExpressionBuilder builder,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
198 IBuildContext into,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
199 List<SqlQuery.SetExpression> items,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
200 IBuildContext ctx,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
201 MemberInitExpression expression,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
202 Expression path)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
203 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
204 foreach (var binding in expression.Bindings)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
205 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
206 var member = binding.Member;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
207
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
208 if (member is MethodInfo)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
209 member = TypeHelper.GetPropertyByMethod((MethodInfo)member);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
210
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
211 if (binding is MemberAssignment)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
212 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
213 var ma = binding as MemberAssignment;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
214 var pe = Expression.MakeMemberAccess(path, member);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
215
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
216 if (ma.Expression is MemberInitExpression && !into.IsExpression(pe, 1, RequestFor.Field).Result)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
217 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
218 BuildSetter(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
219 builder,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
220 into,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
221 items,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
222 ctx,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
223 (MemberInitExpression)ma.Expression, Expression.MakeMemberAccess(path, member));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
224 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
225 else
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
226 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
227 var column = into.ConvertToSql(pe, 1, ConvertFlags.Field);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
228 var expr = builder.ConvertToSqlExpression(ctx, ma.Expression, false);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
229
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
230 if (expr is SqlValueBase && TypeHelper.IsEnumOrNullableEnum(ma.Expression.Type))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
231 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
232 var memberAccessor = TypeAccessor.GetAccessor(ma.Member.DeclaringType)[ma.Member.Name];
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
233 ((SqlValueBase)expr).SetEnumConverter(memberAccessor, builder.MappingSchema);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
234 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
235
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
236 items.Add(new SqlQuery.SetExpression(column[0].Sql, expr));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
237 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
238 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
239 else
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
240 throw new InvalidOperationException();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
241 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
242 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
243
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
244 internal static void ParseSet(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
245 ExpressionBuilder builder,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
246 BuildInfo buildInfo,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
247 LambdaExpression extract,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
248 LambdaExpression update,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
249 IBuildContext select,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
250 SqlTable table,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
251 List<SqlQuery.SetExpression> items)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
252 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
253 var ext = extract.Body;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
254
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
255 while (ext.NodeType == ExpressionType.Convert || ext.NodeType == ExpressionType.ConvertChecked)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
256 ext = ((UnaryExpression)ext).Operand;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
257
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
258 if (ext.NodeType != ExpressionType.MemberAccess || ext.GetRootObject() != extract.Parameters[0])
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
259 throw new LinqException("Member expression expected for the 'Set' statement.");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
260
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
261 var body = (MemberExpression)ext;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
262 var member = body.Member;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
263
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
264 if (member is MethodInfo)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
265 member = TypeHelper.GetPropertyByMethod((MethodInfo)member);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
266
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
267 var members = body.GetMembers();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
268 var name = members
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
269 .Skip(1)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
270 .Select(ex =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
271 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
272 var me = ex as MemberExpression;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
273
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
274 if (me == null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
275 return null;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
276
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
277 var m = me.Member;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
278
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
279 if (m is MethodInfo)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
280 m = TypeHelper.GetPropertyByMethod((MethodInfo)m);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
281
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
282 return m;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
283 })
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
284 .Where(m => m != null && !TypeHelper.IsNullableValueMember(m))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
285 .Select(m => m.Name)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
286 .Aggregate((s1,s2) => s1 + "." + s2);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
287
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
288 if (table != null && !table.Fields.ContainsKey(name))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
289 throw new LinqException("Member '{0}.{1}' is not a table column.", member.DeclaringType.Name, name);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
290
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
291 var column = table != null ?
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
292 table.Fields[name] :
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
293 select.ConvertToSql(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
294 body, 1, ConvertFlags.Field)[0].Sql;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
295 //Expression.MakeMemberAccess(Expression.Parameter(member.DeclaringType, "p"), member), 1, ConvertFlags.Field)[0].Sql;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
296 var sp = select.Parent;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
297 var ctx = new ExpressionContext(buildInfo.Parent, select, update);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
298 var expr = builder.ConvertToSqlExpression(ctx, update.Body, false);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
299
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
300 builder.ReplaceParent(ctx, sp);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
301
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
302 if (expr is SqlValueBase && TypeHelper.IsEnumOrNullableEnum(update.Body.Type))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
303 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
304 var memberAccessor = TypeAccessor.GetAccessor(body.Member.DeclaringType)[body.Member.Name];
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
305 ((SqlValueBase)expr).SetEnumConverter(memberAccessor, builder.MappingSchema);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
306 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
307
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
308 items.Add(new SqlQuery.SetExpression(column, expr));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
309 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
310
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
311 internal static void ParseSet(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
312 ExpressionBuilder builder,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
313 BuildInfo buildInfo,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
314 LambdaExpression extract,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
315 Expression update,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
316 IBuildContext select,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
317 List<SqlQuery.SetExpression> items)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
318 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
319 var ext = extract.Body;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
320
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
321 if (!ExpressionHelper.IsConstant(update.Type) && !builder.AsParameters.Contains(update))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
322 builder.AsParameters.Add(update);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
323
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
324 while (ext.NodeType == ExpressionType.Convert || ext.NodeType == ExpressionType.ConvertChecked)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
325 ext = ((UnaryExpression)ext).Operand;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
326
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
327 if (ext.NodeType != ExpressionType.MemberAccess || ext.GetRootObject() != extract.Parameters[0])
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
328 throw new LinqException("Member expression expected for the 'Set' statement.");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
329
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
330 var body = (MemberExpression)ext;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
331 var member = body.Member;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
332
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
333 if (member is MethodInfo)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
334 member = TypeHelper.GetPropertyByMethod((MethodInfo)member);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
335
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
336 var column = select.ConvertToSql(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
337 body, 1, ConvertFlags.Field);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
338 //Expression.MakeMemberAccess(Expression.Parameter(member.DeclaringType, "p"), member), 1, ConvertFlags.Field);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
339
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
340 if (column.Length == 0)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
341 throw new LinqException("Member '{0}.{1}' is not a table column.", member.DeclaringType.Name, member.Name);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
342
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
343 var expr = builder.ConvertToSql(select, update, false, false);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
344
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
345 if (expr is SqlValueBase && TypeHelper.IsEnumOrNullableEnum(update.Type))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
346 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
347 var memberAccessor = TypeAccessor.GetAccessor(body.Member.DeclaringType)[body.Member.Name];
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
348 ((SqlValueBase)expr).SetEnumConverter(memberAccessor, builder.MappingSchema);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
349 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
350
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
351 items.Add(new SqlQuery.SetExpression(column[0].Sql, expr));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
352 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
353
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
354 #endregion
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
355
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
356 #region UpdateContext
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
357
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
358 class UpdateContext : SequenceContextBase
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
359 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
360 public UpdateContext(IBuildContext parent, IBuildContext sequence)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
361 : base(parent, sequence, null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
362 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
363 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
364
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
365 public override void BuildQuery<T>(Query<T> query, ParameterExpression queryParameter)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
366 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
367 query.SetNonQueryQuery();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
368 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
369
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
370 public override Expression BuildExpression(Expression expression, int level)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
371 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
372 throw new InvalidOperationException();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
373 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
374
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
375 public override SqlInfo[] ConvertToSql(Expression expression, int level, ConvertFlags flags)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
376 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
377 throw new InvalidOperationException();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
378 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
379
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
380 public override SqlInfo[] ConvertToIndex(Expression expression, int level, ConvertFlags flags)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
381 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
382 throw new InvalidOperationException();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
383 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
384
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
385 public override IsExpressionResult IsExpression(Expression expression, int level, RequestFor requestFlag)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
386 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
387 throw new InvalidOperationException();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
388 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
389
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
390 public override IBuildContext GetContext(Expression expression, int level, BuildInfo buildInfo)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
391 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
392 throw new InvalidOperationException();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
393 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
394 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
395
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
396 #endregion
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
397
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
398 #region Set
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
399
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
400 internal class Set : MethodCallBuilder
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
401 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
402 protected override bool CanBuildMethodCall(ExpressionBuilder builder, MethodCallExpression methodCall, BuildInfo buildInfo)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
403 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
404 return methodCall.IsQueryable("Set");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
405 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
406
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
407 protected override IBuildContext BuildMethodCall(ExpressionBuilder builder, MethodCallExpression methodCall, BuildInfo buildInfo)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
408 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
409 var sequence = builder.BuildSequence(new BuildInfo(buildInfo, methodCall.Arguments[0]));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
410 var extract = (LambdaExpression)methodCall.Arguments[1].Unwrap();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
411 var update = methodCall.Arguments[2].Unwrap();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
412
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
413 if (update.NodeType == ExpressionType.Lambda)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
414 ParseSet(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
415 builder,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
416 buildInfo,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
417 extract,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
418 (LambdaExpression)update,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
419 sequence,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
420 sequence.SqlQuery.Update.Table,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
421 sequence.SqlQuery.Update.Items);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
422 else
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
423 ParseSet(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
424 builder,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
425 buildInfo,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
426 extract,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
427 update,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
428 sequence,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
429 sequence.SqlQuery.Update.Items);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
430
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
431 return sequence;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
432 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
433
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
434 protected override SequenceConvertInfo Convert(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
435 ExpressionBuilder builder, MethodCallExpression methodCall, BuildInfo buildInfo, ParameterExpression param)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
436 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
437 return null;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
438 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
439 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
440
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
441 #endregion
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
442 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
443 }