v3.2.683-preview20221025 - 扩展 UseMessagePackMap

This commit is contained in:
2881099
2022-10-25 18:47:46 +08:00
parent 674d7421b3
commit 1dae5b9573
35 changed files with 156 additions and 30 deletions

View File

@ -17,7 +17,7 @@
<SignAssembly>true</SignAssembly>
<AssemblyOriginatorKeyFile>key.snk</AssemblyOriginatorKeyFile>
<DelaySign>false</DelaySign>
<Version>3.2.682</Version>
<Version>3.2.683-preview20221025</Version>
</PropertyGroup>
<ItemGroup>

View File

@ -2014,6 +2014,7 @@ namespace FreeSql.Internal
public static ConcurrentBag<Func<LabelTarget, Expression, Type, Expression>> GetDataReaderValueBlockExpressionSwitchTypeFullName = new ConcurrentBag<Func<LabelTarget, Expression, Type, Expression>>();
public static ConcurrentBag<Func<LabelTarget, Expression, Expression, Type, Expression>> GetDataReaderValueBlockExpressionObjectToStringIfThenElse = new ConcurrentBag<Func<LabelTarget, Expression, Expression, Type, Expression>>();
public static ConcurrentBag<Func<LabelTarget, Expression, Expression, Type, Expression>> GetDataReaderValueBlockExpressionObjectToBytesIfThenElse = new ConcurrentBag<Func<LabelTarget, Expression, Expression, Type, Expression>>();
public static Expression GetDataReaderValueBlockExpression(Type type, Expression value)
{
var returnTarget = Expression.Label(typeof(object));
@ -2025,6 +2026,9 @@ namespace FreeSql.Internal
switch (type.FullName)
{
case "System.Byte[]":
Expression callToBytesExp = Expression.Return(returnTarget, Expression.Call(Expression.Constant(DefaultEncoding), MethodEncodingGetBytes, Expression.Call(MethodToString, valueExp)));
foreach (var toBytesFunc in GetDataReaderValueBlockExpressionObjectToBytesIfThenElse)
callToBytesExp = toBytesFunc(returnTarget, valueExp, callToBytesExp, type);
return Expression.IfThenElse(
Expression.TypeEqual(valueExp, type),
Expression.Return(returnTarget, valueExp),
@ -2034,7 +2038,7 @@ namespace FreeSql.Internal
Expression.IfThenElse(
Expression.OrElse(Expression.TypeEqual(valueExp, typeof(Guid)), Expression.TypeEqual(valueExp, typeof(Guid?))),
Expression.Return(returnTarget, Expression.Call(MethodGuidToBytes, Expression.Convert(valueExp, typeof(Guid)))),
Expression.Return(returnTarget, Expression.Call(Expression.Constant(DefaultEncoding), MethodEncodingGetBytes, Expression.Call(MethodToString, valueExp)))
callToBytesExp
)
)
);