Skip to content

Commit 1da89e3

Browse files
author
shuxinqin
committed
fix code.
1 parent 0b172e1 commit 1da89e3

File tree

4 files changed

+48
-1
lines changed

4 files changed

+48
-1
lines changed

src/Chloe/Core/Visitors/ExpressionEvaluator.cs

+37
Original file line numberDiff line numberDiff line change
@@ -161,5 +161,42 @@ protected override object VisitNewArray(NewArrayExpression exp)
161161

162162
return arr;
163163
}
164+
protected override object VisitMemberInit(MemberInitExpression exp)
165+
{
166+
object instance = this.Visit(exp.NewExpression);
167+
168+
for (int i = 0; i < exp.Bindings.Count; i++)
169+
{
170+
MemberBinding binding = exp.Bindings[i];
171+
172+
if (binding.BindingType != MemberBindingType.Assignment)
173+
{
174+
throw new NotSupportedException();
175+
}
176+
177+
MemberAssignment memberAssignment = (MemberAssignment)binding;
178+
MemberInfo member = memberAssignment.Member;
179+
180+
member.SetMemberValue(instance, this.Visit(memberAssignment.Expression));
181+
}
182+
183+
return instance;
184+
}
185+
protected override object VisitListInit(ListInitExpression exp)
186+
{
187+
object instance = this.Visit(exp.NewExpression);
188+
189+
for (int i = 0; i < exp.Initializers.Count; i++)
190+
{
191+
ElementInit initializer = exp.Initializers[i];
192+
193+
foreach (Expression argument in initializer.Arguments)
194+
{
195+
initializer.AddMethod.Invoke(instance, this.Visit(argument));
196+
}
197+
}
198+
199+
return instance;
200+
}
164201
}
165202
}

src/Chloe/Core/Visitors/ExpressionVisitorBase.cs

+5
Original file line numberDiff line numberDiff line change
@@ -344,6 +344,11 @@ protected override DbExpression VisitNewArray(NewArrayExpression exp)
344344
object arr = ExpressionEvaluator.Evaluate(exp);
345345
return this.Visit(ExpressionExtension.MakeWrapperAccess(arr, exp.Type));
346346
}
347+
protected override DbExpression VisitListInit(ListInitExpression exp)
348+
{
349+
object list = ExpressionEvaluator.Evaluate(exp);
350+
return this.Visit(ExpressionExtension.MakeWrapperAccess(list, exp.Type));
351+
}
347352

348353
// 处理 a.XX==XXX 其中 a.XX.Type 为 bool
349354
DbExpression VisitBinary_Equal_Boolean(BinaryExpression exp)

src/Chloe/Extensions/ReflectionExtension.cs

+5
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,11 @@ public static object GetMemberValue(this MemberInfo propertyOrField, object obj)
4949
throw new ArgumentException();
5050
}
5151

52+
public static object Invoke(this MethodInfo method, object obj, params object[] parameters)
53+
{
54+
return method.Invoke(obj, parameters == null ? new object[0] : parameters.ToArray());
55+
}
56+
5257
public static MemberInfo AsReflectedMemberOf(this MemberInfo propertyOrField, Type type)
5358
{
5459
if (propertyOrField.ReflectedType != type)

src/tools/Chloe.Extension.nuspec

+1-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
<iconUrl>http://images.cnblogs.com/cnblogs_com/so9527/860154/o_ORMicon.png</iconUrl>
1212
<requireLicenseAcceptance>false</requireLicenseAcceptance>
1313
<description>Extension for Chloe.ORM</description>
14-
<copyright>Copyright 2016-2018</copyright>
14+
<copyright>Copyright 2016-2019</copyright>
1515
<tags>Chloe,ORM,Data</tags>
1616

1717
<dependencies>

0 commit comments

Comments
 (0)