diff --git a/Logo/favicon.ico b/Logo/favicon.ico index 81056b7d..3f3b40d9 100644 Binary files a/Logo/favicon.ico and b/Logo/favicon.ico differ diff --git a/Logo/logo.jpg b/Logo/logo.jpg new file mode 100644 index 00000000..d45f0b68 Binary files /dev/null and b/Logo/logo.jpg differ diff --git a/Logo/logo.png b/Logo/logo.png index 85cb42f3..c9275579 100644 Binary files a/Logo/logo.png and b/Logo/logo.png differ diff --git a/Logo/logo.svg b/Logo/logo.svg index 0b58b415..08316734 100644 --- a/Logo/logo.svg +++ b/Logo/logo.svg @@ -1,3943 +1,3 @@ - - - + + diff --git a/nuget-publish.bat b/nuget-publish.bat index a245d294..18a7540e 100644 --- a/nuget-publish.bat +++ b/nuget-publish.bat @@ -1,9 +1,9 @@ :start ::定义版本 -set EFCORE2=2.4.0.03 -set EFCORE3=3.4.0.03 -set EFCORE5=5.4.0.03 -set EFCORE6=6.4.0.03 +set EFCORE2=2.4.0.04 +set EFCORE3=3.4.0.04 +set EFCORE5=5.4.0.04 +set EFCORE6=6.4.0.04 ::删除所有bin与obj下的文件 @echo off diff --git a/src/ShardingCore/Extensions/ExpressionExtension.cs b/src/ShardingCore/Extensions/ExpressionExtension.cs index 2c86b291..c2fa9482 100644 --- a/src/ShardingCore/Extensions/ExpressionExtension.cs +++ b/src/ShardingCore/Extensions/ExpressionExtension.cs @@ -1,16 +1,18 @@ using System; +using System.Collections; +using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; using System.Reflection; namespace ShardingCore.Extensions { -/* -* @Author: xjm -* @Description: -* @Date: Saturday, 14 November 2020 22:06:21 -* @Email: 326308290@qq.com -*/ + /* + * @Author: xjm + * @Description: + * @Date: Saturday, 14 November 2020 22:06:21 + * @Email: 326308290@qq.com + */ public static class ExpressionExtension { public static void SetPropertyValue(this T t, string name, object value) diff --git a/src/ShardingCore/Sharding/Visitors/QueryableRouteDiscoverVisitor.cs b/src/ShardingCore/Sharding/Visitors/QueryableRouteDiscoverVisitor.cs index bb9e5ea0..42add254 100644 --- a/src/ShardingCore/Sharding/Visitors/QueryableRouteDiscoverVisitor.cs +++ b/src/ShardingCore/Sharding/Visitors/QueryableRouteDiscoverVisitor.cs @@ -153,19 +153,31 @@ namespace ShardingCore.Core.Internal.Visitors ); case ListInitExpression e when e.NewExpression.Arguments.Count() == 0: - var collection = e.NewExpression.Constructor.Invoke(new object[0]); - foreach (var i in e.Initializers) { - i.AddMethod.Invoke( - collection, - i.Arguments - .Select( - a => GetShardingKeyValue(a) - ) - .ToArray() - ); + var collection = e.NewExpression.Constructor.Invoke(new object[0]); + foreach (var i in e.Initializers) + { + i.AddMethod.Invoke( + collection, + i.Arguments + .Select( + a => GetShardingKeyValue(a) + ) + .ToArray() + ); + } + return collection; } - return collection; + case NewArrayExpression e when e.NodeType == ExpressionType.NewArrayInit && e.Expressions.Count > 0: + { + var collection = new List(e.Expressions.Count); + foreach (var arrayItemExpression in e.Expressions) + { + collection.Add(GetShardingKeyValue(arrayItemExpression)); + } + return collection; + } + case MethodCallExpression e: return e.Method.Invoke( @@ -317,20 +329,20 @@ namespace ShardingCore.Core.Internal.Visitors { if (methodCallExpression.Object is MemberExpression member1Expression) { - arrayObject = Expression.Lambda(member1Expression).Compile().DynamicInvoke(); + arrayObject = GetShardingKeyValue(member1Expression); } else if (methodCallExpression.Object is ListInitExpression member2Expression) { - arrayObject = Expression.Lambda(member2Expression).Compile().DynamicInvoke(); + arrayObject = GetShardingKeyValue(member2Expression); } } else if (methodCallExpression.Arguments[0] is MemberExpression member2Expression) { - arrayObject = Expression.Lambda(member2Expression).Compile().DynamicInvoke(); + arrayObject = GetShardingKeyValue(member2Expression); } else if (methodCallExpression.Arguments[0] is NewArrayExpression member3Expression) { - arrayObject = Expression.Lambda(member3Expression).Compile().DynamicInvoke(); + arrayObject = GetShardingKeyValue(member3Expression); } if (arrayObject != null) @@ -413,6 +425,7 @@ namespace ShardingCore.Core.Internal.Visitors } } + //var shardingKeyValue = GetShardingKeyValue(methodCallExpression); return x => true; } @@ -429,9 +442,8 @@ namespace ShardingCore.Core.Internal.Visitors if (binaryExpression.Left is UnaryExpression unaryExpression) left = Resolve(unaryExpression); - - if (binaryExpression.Right is BinaryExpression) - right = ParseGetWhere(binaryExpression.Right as BinaryExpression); + if (binaryExpression.Right is BinaryExpression binaryExpression2) + right = ParseGetWhere(binaryExpression2); //组合 if (binaryExpression.NodeType == ExpressionType.AndAlso) diff --git a/test/ShardingCore.Test/ShardingTest.cs b/test/ShardingCore.Test/ShardingTest.cs index 9f15f9ff..8c53540d 100644 --- a/test/ShardingCore.Test/ShardingTest.cs +++ b/test/ShardingCore.Test/ShardingTest.cs @@ -488,10 +488,25 @@ namespace ShardingCore.Test [Fact] public async Task ToList_Id_Not_Eq_Test() { + var methodValue = new MethodValue(){AA = "7"}; + var mods123 = await _virtualDbContext.Set().Where(o => o.Id== methodValue.GetAa()).FirstOrDefaultAsync(); + Assert.NotNull(mods123); + Assert.Equal(mods123.Id,"7"); + var mods12 = await _virtualDbContext.Set().Where(o => new List{"3","4"}.Contains(o.Id) ).ToListAsync(); + Assert.Contains(mods12, o => o.Id == "3"||o.Id=="4"); var mods = await _virtualDbContext.Set().Where(o => o.Id != "3").ToListAsync(); Assert.Equal(999, mods.Count); Assert.DoesNotContain(mods, o => o.Id == "3"); } + public class MethodValue + { + public string AA { get; set; } + + public string GetAa() + { + return AA; + } + } [Fact] public async Task ToList_Id_Not_Eq_Skip_Test()