提交 f229469e 编写于 作者: T tanghai

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

上级 4913216b
......@@ -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>
......
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
{
......
......@@ -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)
{
......
......@@ -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;
}
}
}
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册