Explorar o código

db查询表达式应该放在DBProxyComponent中

tanghai %!s(int64=7) %!d(string=hai) anos
pai
achega
f229469e51

+ 6 - 0
Client-Server.sln.DotSettings.user

@@ -25,10 +25,16 @@
 	<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=CF118143_002D7E37_002D744F_002DBE45_002D3F55345FEC40_002Fd_003AAssets_002Fd_003AScripts_002Fd_003AComponent_002Fd_003AConfig_002Ff_003AClientConfig_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
 	<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=CF118143_002D7E37_002D744F_002DBE45_002D3F55345FEC40_002Fd_003AAssets_002Fd_003AScripts_002Fd_003AComponent_002Fd_003AConfig_002Ff_003AInnerConfig_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
 	<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=CF118143_002D7E37_002D744F_002DBE45_002D3F55345FEC40_002Fd_003AAssets_002Fd_003AScripts_002Fd_003AEntity_002Ff_003AHotfix_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
+	<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=CF118143_002D7E37_002D744F_002DBE45_002D3F55345FEC40_002Fd_003AAssets_002Fd_003AScripts_002Fd_003AEntity_002Ff_003AUnityWebRequestAsync_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
 	<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=CF118143_002D7E37_002D744F_002DBE45_002D3F55345FEC40_002Fd_003AAssets_002Fd_003AScripts_002Fd_003AModule_002Fd_003AMessage_002Fd_003ANetwork_002Fd_003ATCP_002Ff_003ATChannel_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
 	<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=CF118143_002D7E37_002D744F_002DBE45_002D3F55345FEC40_002Fd_003AAssets_002Fd_003AScripts_002Fd_003AModule_002Fd_003AMessage_002Fd_003ANetwork_002Fd_003ATCP_002Ff_003ATService_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
 	<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=CF118143_002D7E37_002D744F_002DBE45_002D3F55345FEC40_002Fd_003AAssets_002Fd_003AScripts_002Fd_003AModule_002Fd_003AMessage_002Fd_003ANetwork_002Ff_003AAChannel_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
 	<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=CF118143_002D7E37_002D744F_002DBE45_002D3F55345FEC40_002Fd_003AAssets_002Fd_003AScripts_002Fd_003AModule_002Fd_003AMessage_002Ff_003AErrorCode_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
+	<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=CF118143_002D7E37_002D744F_002DBE45_002D3F55345FEC40_002Fd_003AAssets_002Fd_003AScripts_002Fd_003AUI_002Fd_003AUILoading_002Fd_003AComponent_002Ff_003AUILoadingComponent_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
+	<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=CF118143_002D7E37_002D744F_002DBE45_002D3F55345FEC40_002Fd_003AAssets_002Fd_003AThirdParty_002Fd_003AILRuntime_002Fd_003AGenerated_002Ff_003ACLRBindings_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
+	<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=CF118143_002D7E37_002D744F_002DBE45_002D3F55345FEC40_002Fd_003AAssets_002Fd_003AThirdParty_002Fd_003AILRuntime_002Fd_003AGenerated_002Ff_003AETModel_005FMoveComponent_005FBinding_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
+	<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=CF118143_002D7E37_002D744F_002DBE45_002D3F55345FEC40_002Fd_003AAssets_002Fd_003AThirdParty_002Fd_003AILRuntime_002Fd_003AGenerated_002Ff_003AETModel_005FResourcesComponent_005FBinding_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
+	<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=CF118143_002D7E37_002D744F_002DBE45_002D3F55345FEC40_002Fd_003AAssets_002Fd_003AThirdParty_002Fd_003AILRuntime_002Fd_003AGenerated_002Ff_003AETModel_005FUnitComponent_005FBinding_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
 	<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=CF118143_002D7E37_002D744F_002DBE45_002D3F55345FEC40_002Fd_003AAssets_002Fd_003AThirdParty_002Fd_003AILRuntime_002Fd_003AILRuntime_002Fd_003ARuntime_002Fd_003AIntepreter_002Ff_003AILIntepreter_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
 	<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=EE38E3D2_002D3D2A_002D4061_002DBD50_002DAE8568126C7D_002Fd_003ABase_002Fd_003AObject_002Ff_003AEntityType_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
 	<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=EE38E3D2_002D3D2A_002D4061_002DBD50_002DAE8568126C7D_002Fd_003AEntity_002Fd_003AConfig_002Ff_003AStartConfig_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>

+ 9 - 1
Server/Hotfix/Module/DB/DBProxyComponentSystem.cs

@@ -1,4 +1,6 @@
-using System.Collections.Generic;
+using System;
+using System.Collections.Generic;
+using System.Linq.Expressions;
 using System.Threading;
 using System.Threading.Tasks;
 using ETModel;
@@ -67,6 +69,12 @@ namespace ETHotfix
 			}
 			return list;
 		}
+		
+		public static async Task<List<T>> Query<T>(this DBProxyComponent self, Expression<Func<T, bool>> func) where T : ComponentWithId
+		{
+			ExpressionVistor vistor = new ExpressionVistor(func);
+			return await self.QueryJson<T>(vistor.Output);
+		}
 
 		public static async Task<List<T>> QueryJson<T>(this DBProxyComponent self, string json) where T : ComponentWithId
 		{

+ 0 - 7
Server/Model/Module/DB/DBCacheComponent.cs

@@ -136,13 +136,6 @@ namespace ETModel
 
 			return tcs.Task;
 		}
-
-		
-		public Task<List<ComponentWithId>> Get<T>(string collectionName, Expression<Func<T, bool>> func) where T : ComponentWithId
-		{
-			var vistor = new ExpressionVistor(func);
-			return GetJson(collectionName,vistor.Output);
-		}
 		
 		public Task<List<ComponentWithId>> GetJson(string collectionName, string json)
 		{

+ 52 - 46
Server/Model/Module/DB/ExpressionVistor.cs

@@ -17,7 +17,7 @@ namespace ETModel
             }
         }
 
-        private string         Variable;
+        private string Variable;
         private ExpressionType NodeType;
 
         public ExpressionVistor(Expression node)
@@ -27,7 +27,7 @@ namespace ETModel
 
         protected override Expression VisitLambda<T>(Expression<T> node)
         {
-            var lambda = base.VisitLambda(node);
+            Expression lambda = base.VisitLambda(node);
             this.Builder.Remove(this.Builder.Length - 1, 1); //Remove the Last Comma
             this.Builder.Append("}");
             return lambda;
@@ -46,32 +46,36 @@ namespace ETModel
                 case ExpressionType.Constant:
                 case ExpressionType.MemberAccess:
                 {
-                    var cleanNode = GetMemberConstant(node);
+                    ConstantExpression cleanNode = GetMemberConstant(node);
                     return VisitConstant(cleanNode);
                 }
             }
 
             if (node.Member.Name != nameof(ComponentWithId.Id))
+            {
                 this.Variable = node.Member.Name;
+            }
             else
+            {
                 this.Variable = "_id";
+            }
+
             return base.VisitMember(node);
         }
 
         private static ConstantExpression GetMemberConstant(MemberExpression node)
         {
             object value;
-            if (node.Member.MemberType == MemberTypes.Field)
-            {
-                value = GetFieldValue(node);
-            }
-            else if (node.Member.MemberType == MemberTypes.Property)
-            {
-                value = GetPropertyValue(node);
-            }
-            else
+            switch (node.Member.MemberType)
             {
-                throw new NotSupportedException();
+                case MemberTypes.Field:
+                    value = GetFieldValue(node);
+                    break;
+                case MemberTypes.Property:
+                    value = GetPropertyValue(node);
+                    break;
+                default:
+                    throw new NotSupportedException();
             }
             return Expression.Constant(value, node.Type);
         }
@@ -80,67 +84,69 @@ namespace ETModel
         {
             this.Builder.Append(this.Variable);
             bool flag = false;
-            if (this.NodeType == ExpressionType.Equal)
-            {
-                this.Builder.Append(":");
-            }
-            else if (this.NodeType == ExpressionType.GreaterThan)
-            {
-                this.Builder.Append(":{");
-                this.Builder.Append("$gt:");
-                flag = true;
-            }
-            else if (this.NodeType == ExpressionType.GreaterThanOrEqual)
-            {
-                this.Builder.Append(":{");
-                this.Builder.Append("$gte:");
-                flag = true;
-            }
-            else if (this.NodeType == ExpressionType.LessThan)
-            {
-                this.Builder.Append(":{");
-                this.Builder.Append("$lt:");
-                flag = true;
-            }
-            else if (this.NodeType == ExpressionType.LessThanOrEqual)
+            switch (this.NodeType)
             {
-                this.Builder.Append(":{");
-                this.Builder.Append("lte:");
-                flag = true;
+                case ExpressionType.Equal:
+                    this.Builder.Append(":");
+                    break;
+                case ExpressionType.GreaterThan:
+                    this.Builder.Append(":{");
+                    this.Builder.Append("$gt:");
+                    flag = true;
+                    break;
+                case ExpressionType.GreaterThanOrEqual:
+                    this.Builder.Append(":{");
+                    this.Builder.Append("$gte:");
+                    flag = true;
+                    break;
+                case ExpressionType.LessThan:
+                    this.Builder.Append(":{");
+                    this.Builder.Append("$lt:");
+                    flag = true;
+                    break;
+                case ExpressionType.LessThanOrEqual:
+                    this.Builder.Append(":{");
+                    this.Builder.Append("lte:");
+                    flag = true;
+                    break;
             }
 
             this.Builder.Append(node.Value);
             if (flag)
+            {
                 this.Builder.Append("}");
+            }
+
             this.Builder.Append(",");
             return base.VisitConstant(node);
         }
         
         private static object GetFieldValue(MemberExpression node)
         {
-            var fieldInfo = (FieldInfo)node.Member;
+            FieldInfo fieldInfo = (FieldInfo)node.Member;
 
-            var instance = (node.Expression == null) ? null : TryEvaluate(node.Expression).Value;
+            object instance = node.Expression == null ? null : TryEvaluate(node.Expression).Value;
 
             return fieldInfo.GetValue(instance);
         }
 
         private static object GetPropertyValue(MemberExpression node)
         {
-            var propertyInfo = (PropertyInfo)node.Member;
+            PropertyInfo propertyInfo = (PropertyInfo)node.Member;
 
-            var instance = (node.Expression == null) ? null : TryEvaluate(node.Expression).Value;
+            object instance = node.Expression == null ? null : TryEvaluate(node.Expression).Value;
 
             return propertyInfo.GetValue(instance, null);
         }
         
         private static ConstantExpression TryEvaluate(Expression expression)
         {
-            if (expression.NodeType == ExpressionType.Constant)
+            if (expression.NodeType != ExpressionType.Constant)
             {
-                return (ConstantExpression)expression;
+                throw new NotSupportedException();
             }
-            throw new NotSupportedException();
+
+            return (ConstantExpression)expression;
         }
     }
 }