mirror of
				https://github.com/nsnail/FreeSql.git
				synced 2025-11-04 09:15:27 +08:00 
			
		
		
		
	文字错误更正
This commit is contained in:
		@@ -33,7 +33,7 @@ var t2 = fsql.DbFirst.GetTablesByDatabase(fsql.DbFirst.GetDatabases()[0]);
 | 
				
			|||||||
> 更多模板逐步开发中。。。
 | 
					> 更多模板逐步开发中。。。
 | 
				
			||||||
 | 
					
 | 
				
			||||||
```csharp
 | 
					```csharp
 | 
				
			||||||
//创建模板生成类现实
 | 
					//创建模板生成类实现
 | 
				
			||||||
var gen = new FreeSql.Generator.TemplateGenerator();
 | 
					var gen = new FreeSql.Generator.TemplateGenerator();
 | 
				
			||||||
gen.Build(fsql.DbFirst, 
 | 
					gen.Build(fsql.DbFirst, 
 | 
				
			||||||
    @"C:\Users\28810\Desktop\github\FreeSql\Templates\MySql\simple-entity",  //模板目录(事先下载)
 | 
					    @"C:\Users\28810\Desktop\github\FreeSql\Templates\MySql\simple-entity",  //模板目录(事先下载)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -27,7 +27,7 @@ IFreeSql fsql = new FreeSql.FreeSqlBuilder()
 | 
				
			|||||||
        }) //监听SQL命令对象,在执行后
 | 
					        }) //监听SQL命令对象,在执行后
 | 
				
			||||||
    .Build();
 | 
					    .Build();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//创建模板生成类现实
 | 
					//创建模板生成类实现
 | 
				
			||||||
var gen = new FreeSql.Generator.TemplateGenerator();
 | 
					var gen = new FreeSql.Generator.TemplateGenerator();
 | 
				
			||||||
gen.Build(mysql.DbFirst, 
 | 
					gen.Build(mysql.DbFirst, 
 | 
				
			||||||
    @"C:\Users\28810\Desktop\github\FreeSql\Templates\MySql\simple-entity",  //模板目录(事先下载)
 | 
					    @"C:\Users\28810\Desktop\github\FreeSql\Templates\MySql\simple-entity",  //模板目录(事先下载)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -33,7 +33,7 @@ var t2 = fsql.DbFirst.GetTablesByDatabase(fsql.DbFirst.GetDatabases()[0]);
 | 
				
			|||||||
> 更多模板逐步开发中。。。
 | 
					> 更多模板逐步开发中。。。
 | 
				
			||||||
 | 
					
 | 
				
			||||||
```csharp
 | 
					```csharp
 | 
				
			||||||
//创建模板生成类现实
 | 
					//创建模板生成类实现
 | 
				
			||||||
var gen = new FreeSql.Generator.TemplateGenerator();
 | 
					var gen = new FreeSql.Generator.TemplateGenerator();
 | 
				
			||||||
gen.Build(fsql.DbFirst, 
 | 
					gen.Build(fsql.DbFirst, 
 | 
				
			||||||
    @"C:\Users\28810\Desktop\github\FreeSql\Templates\MySql\simple-entity",  //模板目录(事先下载)
 | 
					    @"C:\Users\28810\Desktop\github\FreeSql\Templates\MySql\simple-entity",  //模板目录(事先下载)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -18,7 +18,7 @@ var mysql = new FreeSql.FreeSqlBuilder()
 | 
				
			|||||||
    .UseConnectionString(FreeSql.DataType.MySql, "Data Source=127.0.0.1;Port=3306;User ID=root;Password=root;Initial Catalog=cccddd;Charset=utf8;SslMode=none;Max pool size=10")
 | 
					    .UseConnectionString(FreeSql.DataType.MySql, "Data Source=127.0.0.1;Port=3306;User ID=root;Password=root;Initial Catalog=cccddd;Charset=utf8;SslMode=none;Max pool size=10")
 | 
				
			||||||
    .Build();
 | 
					    .Build();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//创建模板生成类现实
 | 
					//创建模板生成类实现
 | 
				
			||||||
var gen = new FreeSql.Generator.TemplateGenerator();
 | 
					var gen = new FreeSql.Generator.TemplateGenerator();
 | 
				
			||||||
gen.Build(mysql.DbFirst, 
 | 
					gen.Build(mysql.DbFirst, 
 | 
				
			||||||
    @"C:\Users\28810\Desktop\github\FreeSql\Templates\MySql\simple-entity",  //模板目录(事先下载)
 | 
					    @"C:\Users\28810\Desktop\github\FreeSql\Templates\MySql\simple-entity",  //模板目录(事先下载)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -5,7 +5,7 @@
 | 
				
			|||||||
    <Version>0.0.12</Version>
 | 
					    <Version>0.0.12</Version>
 | 
				
			||||||
    <Authors>FreeSql</Authors>
 | 
					    <Authors>FreeSql</Authors>
 | 
				
			||||||
    <Product>FreeSql</Product>
 | 
					    <Product>FreeSql</Product>
 | 
				
			||||||
    <Description>FreeSql ICodeFirst 扩展库,现实从 EFCore FluentAPI/Attribute 读取,从而做到无缝接入已使用 EFCore 项目开发。</Description>
 | 
					    <Description>FreeSql ICodeFirst 扩展库,实现从 EFCore FluentAPI/Attribute 读取,从而做到无缝接入已使用 EFCore 项目开发。</Description>
 | 
				
			||||||
    <PackageProjectUrl>https://github.com/2881099/FreeSql</PackageProjectUrl>
 | 
					    <PackageProjectUrl>https://github.com/2881099/FreeSql</PackageProjectUrl>
 | 
				
			||||||
    <RepositoryUrl>https://github.com/2881099/FreeSql</RepositoryUrl>
 | 
					    <RepositoryUrl>https://github.com/2881099/FreeSql</RepositoryUrl>
 | 
				
			||||||
  </PropertyGroup>
 | 
					  </PropertyGroup>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -46,7 +46,7 @@ namespace FreeSql {
 | 
				
			|||||||
				case DataType.Oracle:
 | 
									case DataType.Oracle:
 | 
				
			||||||
				case DataType.Sqlite:
 | 
									case DataType.Sqlite:
 | 
				
			||||||
				default:
 | 
									default:
 | 
				
			||||||
					throw new NotImplementedException($"{_fsql.Ado.DataType}不支持类似returning或output类型的特性,请参考FreeSql插入数据的方法重新现实。");
 | 
										throw new NotImplementedException($"{_fsql.Ado.DataType}不支持类似returning或output类型的特性,请参考FreeSql插入数据的方法重新实现。");
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -60,7 +60,7 @@ namespace FreeSql {
 | 
				
			|||||||
				case DataType.Oracle:
 | 
									case DataType.Oracle:
 | 
				
			||||||
				case DataType.Sqlite:
 | 
									case DataType.Sqlite:
 | 
				
			||||||
				default:
 | 
									default:
 | 
				
			||||||
					throw new NotImplementedException($"{_fsql.Ado.DataType}不支持类似returning或output类型的特性,请参考FreeSql插入数据的方法重新现实。");
 | 
										throw new NotImplementedException($"{_fsql.Ado.DataType}不支持类似returning或output类型的特性,请参考FreeSql插入数据的方法重新实现。");
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -74,7 +74,7 @@ namespace FreeSql {
 | 
				
			|||||||
				case DataType.Oracle:
 | 
									case DataType.Oracle:
 | 
				
			||||||
				case DataType.Sqlite:
 | 
									case DataType.Sqlite:
 | 
				
			||||||
				default:
 | 
									default:
 | 
				
			||||||
					throw new NotImplementedException($"{_fsql.Ado.DataType}不支持类似returning或output类型的特性,请参考FreeSql插入数据的方法重新现实。");
 | 
										throw new NotImplementedException($"{_fsql.Ado.DataType}不支持类似returning或output类型的特性,请参考FreeSql插入数据的方法重新实现。");
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -88,7 +88,7 @@ namespace FreeSql {
 | 
				
			|||||||
				case DataType.Oracle:
 | 
									case DataType.Oracle:
 | 
				
			||||||
				case DataType.Sqlite:
 | 
									case DataType.Sqlite:
 | 
				
			||||||
				default:
 | 
									default:
 | 
				
			||||||
					throw new NotImplementedException($"{_fsql.Ado.DataType}不支持类似returning或output类型的特性,请参考FreeSql插入数据的方法重新现实。");
 | 
										throw new NotImplementedException($"{_fsql.Ado.DataType}不支持类似returning或output类型的特性,请参考FreeSql插入数据的方法重新实现。");
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -4,7 +4,7 @@
 | 
				
			|||||||
    <TargetFramework>netstandard2.0</TargetFramework>
 | 
					    <TargetFramework>netstandard2.0</TargetFramework>
 | 
				
			||||||
    <Version>0.1.7</Version>
 | 
					    <Version>0.1.7</Version>
 | 
				
			||||||
    <Authors>YeXiangQin</Authors>
 | 
					    <Authors>YeXiangQin</Authors>
 | 
				
			||||||
    <Description>FreeSql 通用仓库层现实,支持 MySql/SqlServer/PostgreSQL/Oracle/Sqlite 数据库。</Description>
 | 
					    <Description>FreeSql 通用仓库层实现,支持 MySql/SqlServer/PostgreSQL/Oracle/Sqlite 数据库。</Description>
 | 
				
			||||||
    <PackageProjectUrl>https://github.com/2881099/FreeSql</PackageProjectUrl>
 | 
					    <PackageProjectUrl>https://github.com/2881099/FreeSql</PackageProjectUrl>
 | 
				
			||||||
    <PackageTags>FreeSql ORM Repository</PackageTags>
 | 
					    <PackageTags>FreeSql ORM Repository</PackageTags>
 | 
				
			||||||
    <GeneratePackageOnBuild>true</GeneratePackageOnBuild>
 | 
					    <GeneratePackageOnBuild>true</GeneratePackageOnBuild>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -22,7 +22,7 @@ namespace FreeSql {
 | 
				
			|||||||
		/// <summary>
 | 
							/// <summary>
 | 
				
			||||||
		/// 使用缓存,不指定默认使用内存
 | 
							/// 使用缓存,不指定默认使用内存
 | 
				
			||||||
		/// </summary>
 | 
							/// </summary>
 | 
				
			||||||
		/// <param name="cache">缓存现实</param>
 | 
							/// <param name="cache">缓存实现</param>
 | 
				
			||||||
		/// <returns></returns>
 | 
							/// <returns></returns>
 | 
				
			||||||
		public FreeSqlBuilder UseCache(IDistributedCache cache) {
 | 
							public FreeSqlBuilder UseCache(IDistributedCache cache) {
 | 
				
			||||||
			_cache = cache;
 | 
								_cache = cache;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -297,7 +297,7 @@ namespace FreeSql.Internal {
 | 
				
			|||||||
					}
 | 
										}
 | 
				
			||||||
					var other3Exp = ExpressionLambdaToSqlOther(exp3, _tables, _selectColumnMap, getSelectGroupingMapString, tbtype, isQuoteName);
 | 
										var other3Exp = ExpressionLambdaToSqlOther(exp3, _tables, _selectColumnMap, getSelectGroupingMapString, tbtype, isQuoteName);
 | 
				
			||||||
					if (string.IsNullOrEmpty(other3Exp) == false) return other3Exp;
 | 
										if (string.IsNullOrEmpty(other3Exp) == false) return other3Exp;
 | 
				
			||||||
					throw new Exception($"未现实函数表达式 {exp3} 解析");
 | 
										throw new Exception($"未实现函数表达式 {exp3} 解析");
 | 
				
			||||||
				case ExpressionType.MemberAccess:
 | 
									case ExpressionType.MemberAccess:
 | 
				
			||||||
					var exp4 = exp as MemberExpression;
 | 
										var exp4 = exp as MemberExpression;
 | 
				
			||||||
					if (exp4.Expression != null && exp4.Expression.Type.IsArray == false && exp4.Expression.Type.IsNullableType()) return ExpressionLambdaToSql(exp4.Expression, _tables, _selectColumnMap, getSelectGroupingMapString, tbtype, isQuoteName);
 | 
										if (exp4.Expression != null && exp4.Expression.Type.IsArray == false && exp4.Expression.Type.IsNullableType()) return ExpressionLambdaToSql(exp4.Expression, _tables, _selectColumnMap, getSelectGroupingMapString, tbtype, isQuoteName);
 | 
				
			||||||
@@ -380,7 +380,7 @@ namespace FreeSql.Internal {
 | 
				
			|||||||
						exp2 = expStack.Pop();
 | 
											exp2 = expStack.Pop();
 | 
				
			||||||
						switch (exp2.NodeType) {
 | 
											switch (exp2.NodeType) {
 | 
				
			||||||
							case ExpressionType.Constant:
 | 
												case ExpressionType.Constant:
 | 
				
			||||||
								throw new NotImplementedException("未现实 MemberAccess 下的 Constant");
 | 
													throw new NotImplementedException("未实现 MemberAccess 下的 Constant");
 | 
				
			||||||
							case ExpressionType.Parameter:
 | 
												case ExpressionType.Parameter:
 | 
				
			||||||
							case ExpressionType.MemberAccess:
 | 
												case ExpressionType.MemberAccess:
 | 
				
			||||||
								
 | 
													
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -25,7 +25,7 @@ namespace FreeSql.Internal.CommonProvider {
 | 
				
			|||||||
			try { Cache.Remove($"{key1}|{key2}"); } catch { } // redis-cluster 不允许执行 multi keys 命令
 | 
								try { Cache.Remove($"{key1}|{key2}"); } catch { } // redis-cluster 不允许执行 multi keys 命令
 | 
				
			||||||
			CacheSupportMultiRemove = Cache.Get(key1) == null && cache.Get(key2) == null;
 | 
								CacheSupportMultiRemove = Cache.Get(key1) == null && cache.Get(key2) == null;
 | 
				
			||||||
			if (CacheSupportMultiRemove == false) {
 | 
								if (CacheSupportMultiRemove == false) {
 | 
				
			||||||
				log.LogWarning("FreeSql Warning: 低性能, IDistributedCache 没现实批量删除缓存 Cache.Remove(\"key1|key2\").");
 | 
									log.LogWarning("FreeSql Warning: 低性能, IDistributedCache 没实现批量删除缓存 Cache.Remove(\"key1|key2\").");
 | 
				
			||||||
				Remove(key1, key2);
 | 
									Remove(key1, key2);
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
@@ -99,7 +99,7 @@ namespace FreeSql.Internal.CommonProvider {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
		public T Shell<T>(string key, int timeoutSeconds, Func<T> getData) {
 | 
							public T Shell<T>(string key, int timeoutSeconds, Func<T> getData) {
 | 
				
			||||||
			if (timeoutSeconds <= 0) return getData();
 | 
								if (timeoutSeconds <= 0) return getData();
 | 
				
			||||||
			if (Cache == null) throw new Exception("缓存现实 IDistributedCache 为 null");
 | 
								if (Cache == null) throw new Exception("缓存实现 IDistributedCache 为 null");
 | 
				
			||||||
			var cacheValue = Cache.Get(key);
 | 
								var cacheValue = Cache.Get(key);
 | 
				
			||||||
			if (cacheValue != null) {
 | 
								if (cacheValue != null) {
 | 
				
			||||||
				try {
 | 
									try {
 | 
				
			||||||
@@ -117,7 +117,7 @@ namespace FreeSql.Internal.CommonProvider {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
		public T Shell<T>(string key, string field, int timeoutSeconds, Func<T> getData) {
 | 
							public T Shell<T>(string key, string field, int timeoutSeconds, Func<T> getData) {
 | 
				
			||||||
			if (timeoutSeconds <= 0) return getData();
 | 
								if (timeoutSeconds <= 0) return getData();
 | 
				
			||||||
			if (Cache == null) throw new Exception("缓存现实 IDistributedCache 为 null");
 | 
								if (Cache == null) throw new Exception("缓存实现 IDistributedCache 为 null");
 | 
				
			||||||
			var hashkey = $"{key}:{field}";
 | 
								var hashkey = $"{key}:{field}";
 | 
				
			||||||
			var cacheValue = Cache.Get(hashkey);
 | 
								var cacheValue = Cache.Get(hashkey);
 | 
				
			||||||
			if (cacheValue != null) {
 | 
								if (cacheValue != null) {
 | 
				
			||||||
@@ -137,7 +137,7 @@ namespace FreeSql.Internal.CommonProvider {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
		async public Task<T> ShellAsync<T>(string key, int timeoutSeconds, Func<Task<T>> getDataAsync) {
 | 
							async public Task<T> ShellAsync<T>(string key, int timeoutSeconds, Func<Task<T>> getDataAsync) {
 | 
				
			||||||
			if (timeoutSeconds <= 0) return await getDataAsync();
 | 
								if (timeoutSeconds <= 0) return await getDataAsync();
 | 
				
			||||||
			if (Cache == null) throw new Exception("缓存现实 IDistributedCache 为 null");
 | 
								if (Cache == null) throw new Exception("缓存实现 IDistributedCache 为 null");
 | 
				
			||||||
			var cacheValue = await Cache.GetAsync(key);
 | 
								var cacheValue = await Cache.GetAsync(key);
 | 
				
			||||||
			if (cacheValue != null) {
 | 
								if (cacheValue != null) {
 | 
				
			||||||
				try {
 | 
									try {
 | 
				
			||||||
@@ -155,7 +155,7 @@ namespace FreeSql.Internal.CommonProvider {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
		async public Task<T> ShellAsync<T>(string key, string field, int timeoutSeconds, Func<Task<T>> getDataAsync) {
 | 
							async public Task<T> ShellAsync<T>(string key, string field, int timeoutSeconds, Func<Task<T>> getDataAsync) {
 | 
				
			||||||
			if (timeoutSeconds <= 0) return await getDataAsync();
 | 
								if (timeoutSeconds <= 0) return await getDataAsync();
 | 
				
			||||||
			if (Cache == null) throw new Exception("缓存现实 IDistributedCache 为 null");
 | 
								if (Cache == null) throw new Exception("缓存实现 IDistributedCache 为 null");
 | 
				
			||||||
			var hashkey = $"{key}:{field}";
 | 
								var hashkey = $"{key}:{field}";
 | 
				
			||||||
			var cacheValue = await Cache.GetAsync(hashkey);
 | 
								var cacheValue = await Cache.GetAsync(hashkey);
 | 
				
			||||||
			if (cacheValue != null) {
 | 
								if (cacheValue != null) {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -39,7 +39,7 @@ namespace FreeSql.Internal.CommonProvider {
 | 
				
			|||||||
						case "InnerJoin": this.InternalJoin(expCall.Arguments[0], SelectTableInfoType.InnerJoin); break;
 | 
											case "InnerJoin": this.InternalJoin(expCall.Arguments[0], SelectTableInfoType.InnerJoin); break;
 | 
				
			||||||
						case "RightJoin": this.InternalJoin(expCall.Arguments[0], SelectTableInfoType.RightJoin); break;
 | 
											case "RightJoin": this.InternalJoin(expCall.Arguments[0], SelectTableInfoType.RightJoin); break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
						default: throw new NotImplementedException($"未现实 {expCall.Method.Name}");
 | 
											default: throw new NotImplementedException($"未实现 {expCall.Method.Name}");
 | 
				
			||||||
					}
 | 
										}
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -61,7 +61,7 @@ public abstract class MygisGeometry {
 | 
				
			|||||||
		else if (wkt.StartsWith("multipoint", StringComparison.CurrentCultureIgnoreCase)) return new MygisMultiPoint(ParseLineString(wkt.Substring(10).Trim('(', ')')));
 | 
							else if (wkt.StartsWith("multipoint", StringComparison.CurrentCultureIgnoreCase)) return new MygisMultiPoint(ParseLineString(wkt.Substring(10).Trim('(', ')')));
 | 
				
			||||||
		else if (wkt.StartsWith("multilinestring", StringComparison.CurrentCultureIgnoreCase)) return new MygisMultiLineString(ParseMultiLineString(wkt.Substring(15).Trim('(', ')')));
 | 
							else if (wkt.StartsWith("multilinestring", StringComparison.CurrentCultureIgnoreCase)) return new MygisMultiLineString(ParseMultiLineString(wkt.Substring(15).Trim('(', ')')));
 | 
				
			||||||
		else if (wkt.StartsWith("multipolygon", StringComparison.CurrentCultureIgnoreCase)) return new MygisMultiPolygon(ParseMultiPolygon(wkt.Substring(12).Trim('(', ')')));
 | 
							else if (wkt.StartsWith("multipolygon", StringComparison.CurrentCultureIgnoreCase)) return new MygisMultiPolygon(ParseMultiPolygon(wkt.Substring(12).Trim('(', ')')));
 | 
				
			||||||
		throw new NotImplementedException($"MygisGeometry.Parse 未现实 \"{wkt}\"");
 | 
							throw new NotImplementedException($"MygisGeometry.Parse 未实现 \"{wkt}\"");
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	static MygisPoint ParsePoint(string str) {
 | 
						static MygisPoint ParsePoint(string str) {
 | 
				
			||||||
		var m = regexMygisPoint.Match(str);
 | 
							var m = regexMygisPoint.Match(str);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -187,7 +187,7 @@ namespace FreeSql.MySql {
 | 
				
			|||||||
					case "Equals": return $"({left} = {getExp(exp.Arguments[0])})";
 | 
										case "Equals": return $"({left} = {getExp(exp.Arguments[0])})";
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			throw new Exception($"MySqlExpression 未现实函数表达式 {exp} 解析");
 | 
								throw new Exception($"MySqlExpression 未实现函数表达式 {exp} 解析");
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		internal override string ExpressionLambdaToSqlCallMath(MethodCallExpression exp, List<SelectTableInfo> _tables, List<SelectColumnInfo> _selectColumnMap, Func<Expression[], string> getSelectGroupingMapString, SelectTableInfoType tbtype, bool isQuoteName) {
 | 
							internal override string ExpressionLambdaToSqlCallMath(MethodCallExpression exp, List<SelectTableInfo> _tables, List<SelectColumnInfo> _selectColumnMap, Func<Expression[], string> getSelectGroupingMapString, SelectTableInfoType tbtype, bool isQuoteName) {
 | 
				
			||||||
			Func<Expression, string> getExp = exparg => ExpressionLambdaToSql(exparg, _tables, _selectColumnMap, getSelectGroupingMapString, tbtype, isQuoteName);
 | 
								Func<Expression, string> getExp = exparg => ExpressionLambdaToSql(exparg, _tables, _selectColumnMap, getSelectGroupingMapString, tbtype, isQuoteName);
 | 
				
			||||||
@@ -213,7 +213,7 @@ namespace FreeSql.MySql {
 | 
				
			|||||||
				case "Atan2": return $"atan2({getExp(exp.Arguments[0])}, {getExp(exp.Arguments[1])})";
 | 
									case "Atan2": return $"atan2({getExp(exp.Arguments[0])}, {getExp(exp.Arguments[1])})";
 | 
				
			||||||
				case "Truncate": return $"truncate({getExp(exp.Arguments[0])}, 0)";
 | 
									case "Truncate": return $"truncate({getExp(exp.Arguments[0])}, 0)";
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			throw new Exception($"MySqlExpression 未现实函数表达式 {exp} 解析");
 | 
								throw new Exception($"MySqlExpression 未实现函数表达式 {exp} 解析");
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		internal override string ExpressionLambdaToSqlCallDateTime(MethodCallExpression exp, List<SelectTableInfo> _tables, List<SelectColumnInfo> _selectColumnMap, Func<Expression[], string> getSelectGroupingMapString, SelectTableInfoType tbtype, bool isQuoteName) {
 | 
							internal override string ExpressionLambdaToSqlCallDateTime(MethodCallExpression exp, List<SelectTableInfo> _tables, List<SelectColumnInfo> _selectColumnMap, Func<Expression[], string> getSelectGroupingMapString, SelectTableInfoType tbtype, bool isQuoteName) {
 | 
				
			||||||
			Func<Expression, string> getExp = exparg => ExpressionLambdaToSql(exparg, _tables, _selectColumnMap, getSelectGroupingMapString, tbtype, isQuoteName);
 | 
								Func<Expression, string> getExp = exparg => ExpressionLambdaToSql(exparg, _tables, _selectColumnMap, getSelectGroupingMapString, tbtype, isQuoteName);
 | 
				
			||||||
@@ -256,7 +256,7 @@ namespace FreeSql.MySql {
 | 
				
			|||||||
					case "ToString": return $"date_format({left}, '%Y-%m-%d %H:%i:%s.%f')";
 | 
										case "ToString": return $"date_format({left}, '%Y-%m-%d %H:%i:%s.%f')";
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			throw new Exception($"MySqlExpression 未现实函数表达式 {exp} 解析");
 | 
								throw new Exception($"MySqlExpression 未实现函数表达式 {exp} 解析");
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		internal override string ExpressionLambdaToSqlCallTimeSpan(MethodCallExpression exp, List<SelectTableInfo> _tables, List<SelectColumnInfo> _selectColumnMap, Func<Expression[], string> getSelectGroupingMapString, SelectTableInfoType tbtype, bool isQuoteName) {
 | 
							internal override string ExpressionLambdaToSqlCallTimeSpan(MethodCallExpression exp, List<SelectTableInfo> _tables, List<SelectColumnInfo> _selectColumnMap, Func<Expression[], string> getSelectGroupingMapString, SelectTableInfoType tbtype, bool isQuoteName) {
 | 
				
			||||||
			Func<Expression, string> getExp = exparg => ExpressionLambdaToSql(exparg, _tables, _selectColumnMap, getSelectGroupingMapString, tbtype, isQuoteName);
 | 
								Func<Expression, string> getExp = exparg => ExpressionLambdaToSql(exparg, _tables, _selectColumnMap, getSelectGroupingMapString, tbtype, isQuoteName);
 | 
				
			||||||
@@ -286,7 +286,7 @@ namespace FreeSql.MySql {
 | 
				
			|||||||
					case "ToString": return $"cast({left} as char)";
 | 
										case "ToString": return $"cast({left} as char)";
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			throw new Exception($"MySqlExpression 未现实函数表达式 {exp} 解析");
 | 
								throw new Exception($"MySqlExpression 未实现函数表达式 {exp} 解析");
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		internal override string ExpressionLambdaToSqlCallConvert(MethodCallExpression exp, List<SelectTableInfo> _tables, List<SelectColumnInfo> _selectColumnMap, Func<Expression[], string> getSelectGroupingMapString, SelectTableInfoType tbtype, bool isQuoteName) {
 | 
							internal override string ExpressionLambdaToSqlCallConvert(MethodCallExpression exp, List<SelectTableInfo> _tables, List<SelectColumnInfo> _selectColumnMap, Func<Expression[], string> getSelectGroupingMapString, SelectTableInfoType tbtype, bool isQuoteName) {
 | 
				
			||||||
			Func<Expression, string> getExp = exparg => ExpressionLambdaToSql(exparg, _tables, _selectColumnMap, getSelectGroupingMapString, tbtype, isQuoteName);
 | 
								Func<Expression, string> getExp = exparg => ExpressionLambdaToSql(exparg, _tables, _selectColumnMap, getSelectGroupingMapString, tbtype, isQuoteName);
 | 
				
			||||||
@@ -309,7 +309,7 @@ namespace FreeSql.MySql {
 | 
				
			|||||||
					case "ToUInt64": return $"cast({getExp(exp.Arguments[0])} as unsigned)";
 | 
										case "ToUInt64": return $"cast({getExp(exp.Arguments[0])} as unsigned)";
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			throw new Exception($"MySqlExpression 未现实函数表达式 {exp} 解析");
 | 
								throw new Exception($"MySqlExpression 未实现函数表达式 {exp} 解析");
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -187,7 +187,7 @@ namespace FreeSql.Oracle {
 | 
				
			|||||||
					case "Equals": return $"({left} = {getExp(exp.Arguments[0])})";
 | 
										case "Equals": return $"({left} = {getExp(exp.Arguments[0])})";
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			throw new Exception($"OracleExpression 未现实函数表达式 {exp} 解析");
 | 
								throw new Exception($"OracleExpression 未实现函数表达式 {exp} 解析");
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		internal override string ExpressionLambdaToSqlCallMath(MethodCallExpression exp, List<SelectTableInfo> _tables, List<SelectColumnInfo> _selectColumnMap, Func<Expression[], string> getSelectGroupingMapString, SelectTableInfoType tbtype, bool isQuoteName) {
 | 
							internal override string ExpressionLambdaToSqlCallMath(MethodCallExpression exp, List<SelectTableInfo> _tables, List<SelectColumnInfo> _selectColumnMap, Func<Expression[], string> getSelectGroupingMapString, SelectTableInfoType tbtype, bool isQuoteName) {
 | 
				
			||||||
			Func<Expression, string> getExp = exparg => ExpressionLambdaToSql(exparg, _tables, _selectColumnMap, getSelectGroupingMapString, tbtype, isQuoteName);
 | 
								Func<Expression, string> getExp = exparg => ExpressionLambdaToSql(exparg, _tables, _selectColumnMap, getSelectGroupingMapString, tbtype, isQuoteName);
 | 
				
			||||||
@@ -214,7 +214,7 @@ namespace FreeSql.Oracle {
 | 
				
			|||||||
				//case "Atan2": return $"atan2({getExp(exp.Arguments[0])}, {getExp(exp.Arguments[1])})";
 | 
									//case "Atan2": return $"atan2({getExp(exp.Arguments[0])}, {getExp(exp.Arguments[1])})";
 | 
				
			||||||
				case "Truncate": return $"trunc({getExp(exp.Arguments[0])}, 0)";
 | 
									case "Truncate": return $"trunc({getExp(exp.Arguments[0])}, 0)";
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			throw new Exception($"OracleExpression 未现实函数表达式 {exp} 解析");
 | 
								throw new Exception($"OracleExpression 未实现函数表达式 {exp} 解析");
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		internal override string ExpressionLambdaToSqlCallDateTime(MethodCallExpression exp, List<SelectTableInfo> _tables, List<SelectColumnInfo> _selectColumnMap, Func<Expression[], string> getSelectGroupingMapString, SelectTableInfoType tbtype, bool isQuoteName) {
 | 
							internal override string ExpressionLambdaToSqlCallDateTime(MethodCallExpression exp, List<SelectTableInfo> _tables, List<SelectColumnInfo> _selectColumnMap, Func<Expression[], string> getSelectGroupingMapString, SelectTableInfoType tbtype, bool isQuoteName) {
 | 
				
			||||||
			Func<Expression, string> getExp = exparg => ExpressionLambdaToSql(exparg, _tables, _selectColumnMap, getSelectGroupingMapString, tbtype, isQuoteName);
 | 
								Func<Expression, string> getExp = exparg => ExpressionLambdaToSql(exparg, _tables, _selectColumnMap, getSelectGroupingMapString, tbtype, isQuoteName);
 | 
				
			||||||
@@ -257,7 +257,7 @@ namespace FreeSql.Oracle {
 | 
				
			|||||||
					case "ToString": return $"to_char({left},'YYYY-MM-DD HH24:MI:SS.FF6')";
 | 
										case "ToString": return $"to_char({left},'YYYY-MM-DD HH24:MI:SS.FF6')";
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			throw new Exception($"OracleExpression 未现实函数表达式 {exp} 解析");
 | 
								throw new Exception($"OracleExpression 未实现函数表达式 {exp} 解析");
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		internal override string ExpressionLambdaToSqlCallTimeSpan(MethodCallExpression exp, List<SelectTableInfo> _tables, List<SelectColumnInfo> _selectColumnMap, Func<Expression[], string> getSelectGroupingMapString, SelectTableInfoType tbtype, bool isQuoteName) {
 | 
							internal override string ExpressionLambdaToSqlCallTimeSpan(MethodCallExpression exp, List<SelectTableInfo> _tables, List<SelectColumnInfo> _selectColumnMap, Func<Expression[], string> getSelectGroupingMapString, SelectTableInfoType tbtype, bool isQuoteName) {
 | 
				
			||||||
			Func<Expression, string> getExp = exparg => ExpressionLambdaToSql(exparg, _tables, _selectColumnMap, getSelectGroupingMapString, tbtype, isQuoteName);
 | 
								Func<Expression, string> getExp = exparg => ExpressionLambdaToSql(exparg, _tables, _selectColumnMap, getSelectGroupingMapString, tbtype, isQuoteName);
 | 
				
			||||||
@@ -287,7 +287,7 @@ namespace FreeSql.Oracle {
 | 
				
			|||||||
					case "ToString": return $"to_char({left})";
 | 
										case "ToString": return $"to_char({left})";
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			throw new Exception($"OracleExpression 未现实函数表达式 {exp} 解析");
 | 
								throw new Exception($"OracleExpression 未实现函数表达式 {exp} 解析");
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		internal override string ExpressionLambdaToSqlCallConvert(MethodCallExpression exp, List<SelectTableInfo> _tables, List<SelectColumnInfo> _selectColumnMap, Func<Expression[], string> getSelectGroupingMapString, SelectTableInfoType tbtype, bool isQuoteName) {
 | 
							internal override string ExpressionLambdaToSqlCallConvert(MethodCallExpression exp, List<SelectTableInfo> _tables, List<SelectColumnInfo> _selectColumnMap, Func<Expression[], string> getSelectGroupingMapString, SelectTableInfoType tbtype, bool isQuoteName) {
 | 
				
			||||||
			Func<Expression, string> getExp = exparg => ExpressionLambdaToSql(exparg, _tables, _selectColumnMap, getSelectGroupingMapString, tbtype, isQuoteName);
 | 
								Func<Expression, string> getExp = exparg => ExpressionLambdaToSql(exparg, _tables, _selectColumnMap, getSelectGroupingMapString, tbtype, isQuoteName);
 | 
				
			||||||
@@ -310,7 +310,7 @@ namespace FreeSql.Oracle {
 | 
				
			|||||||
					case "ToUInt64": return $"cast({getExp(exp.Arguments[0])} as number)";
 | 
										case "ToUInt64": return $"cast({getExp(exp.Arguments[0])} as number)";
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			throw new Exception($"OracleExpression 未现实函数表达式 {exp} 解析");
 | 
								throw new Exception($"OracleExpression 未实现函数表达式 {exp} 解析");
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -284,7 +284,7 @@ namespace FreeSql.PostgreSQL {
 | 
				
			|||||||
					case "Equals": return $"({left} = ({getExp(exp.Arguments[0])})::varchar)";
 | 
										case "Equals": return $"({left} = ({getExp(exp.Arguments[0])})::varchar)";
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			throw new Exception($"PostgreSQLExpression 未现实函数表达式 {exp} 解析");
 | 
								throw new Exception($"PostgreSQLExpression 未实现函数表达式 {exp} 解析");
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		internal override string ExpressionLambdaToSqlCallMath(MethodCallExpression exp, List<SelectTableInfo> _tables, List<SelectColumnInfo> _selectColumnMap, Func<Expression[], string> getSelectGroupingMapString, SelectTableInfoType tbtype, bool isQuoteName) {
 | 
							internal override string ExpressionLambdaToSqlCallMath(MethodCallExpression exp, List<SelectTableInfo> _tables, List<SelectColumnInfo> _selectColumnMap, Func<Expression[], string> getSelectGroupingMapString, SelectTableInfoType tbtype, bool isQuoteName) {
 | 
				
			||||||
			Func<Expression, string> getExp = exparg => ExpressionLambdaToSql(exparg, _tables, _selectColumnMap, getSelectGroupingMapString, tbtype, isQuoteName);
 | 
								Func<Expression, string> getExp = exparg => ExpressionLambdaToSql(exparg, _tables, _selectColumnMap, getSelectGroupingMapString, tbtype, isQuoteName);
 | 
				
			||||||
@@ -310,7 +310,7 @@ namespace FreeSql.PostgreSQL {
 | 
				
			|||||||
				case "Atan2": return $"atan2({getExp(exp.Arguments[0])}, {getExp(exp.Arguments[1])})";
 | 
									case "Atan2": return $"atan2({getExp(exp.Arguments[0])}, {getExp(exp.Arguments[1])})";
 | 
				
			||||||
				case "Truncate": return $"trunc({getExp(exp.Arguments[0])}, 0)";
 | 
									case "Truncate": return $"trunc({getExp(exp.Arguments[0])}, 0)";
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			throw new Exception($"PostgreSQLExpression 未现实函数表达式 {exp} 解析");
 | 
								throw new Exception($"PostgreSQLExpression 未实现函数表达式 {exp} 解析");
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		internal override string ExpressionLambdaToSqlCallDateTime(MethodCallExpression exp, List<SelectTableInfo> _tables, List<SelectColumnInfo> _selectColumnMap, Func<Expression[], string> getSelectGroupingMapString, SelectTableInfoType tbtype, bool isQuoteName) {
 | 
							internal override string ExpressionLambdaToSqlCallDateTime(MethodCallExpression exp, List<SelectTableInfo> _tables, List<SelectColumnInfo> _selectColumnMap, Func<Expression[], string> getSelectGroupingMapString, SelectTableInfoType tbtype, bool isQuoteName) {
 | 
				
			||||||
			Func<Expression, string> getExp = exparg => ExpressionLambdaToSql(exparg, _tables, _selectColumnMap, getSelectGroupingMapString, tbtype, isQuoteName);
 | 
								Func<Expression, string> getExp = exparg => ExpressionLambdaToSql(exparg, _tables, _selectColumnMap, getSelectGroupingMapString, tbtype, isQuoteName);
 | 
				
			||||||
@@ -353,7 +353,7 @@ namespace FreeSql.PostgreSQL {
 | 
				
			|||||||
					case "ToString": return $"to_char({left}, 'YYYY-MM-DD HH24:MI:SS.US')";
 | 
										case "ToString": return $"to_char({left}, 'YYYY-MM-DD HH24:MI:SS.US')";
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			throw new Exception($"PostgreSQLExpression 未现实函数表达式 {exp} 解析");
 | 
								throw new Exception($"PostgreSQLExpression 未实现函数表达式 {exp} 解析");
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		internal override string ExpressionLambdaToSqlCallTimeSpan(MethodCallExpression exp, List<SelectTableInfo> _tables, List<SelectColumnInfo> _selectColumnMap, Func<Expression[], string> getSelectGroupingMapString, SelectTableInfoType tbtype, bool isQuoteName) {
 | 
							internal override string ExpressionLambdaToSqlCallTimeSpan(MethodCallExpression exp, List<SelectTableInfo> _tables, List<SelectColumnInfo> _selectColumnMap, Func<Expression[], string> getSelectGroupingMapString, SelectTableInfoType tbtype, bool isQuoteName) {
 | 
				
			||||||
			Func<Expression, string> getExp = exparg => ExpressionLambdaToSql(exparg, _tables, _selectColumnMap, getSelectGroupingMapString, tbtype, isQuoteName);
 | 
								Func<Expression, string> getExp = exparg => ExpressionLambdaToSql(exparg, _tables, _selectColumnMap, getSelectGroupingMapString, tbtype, isQuoteName);
 | 
				
			||||||
@@ -383,7 +383,7 @@ namespace FreeSql.PostgreSQL {
 | 
				
			|||||||
					case "ToString": return $"({left})::varchar";
 | 
										case "ToString": return $"({left})::varchar";
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			throw new Exception($"PostgreSQLExpression 未现实函数表达式 {exp} 解析");
 | 
								throw new Exception($"PostgreSQLExpression 未实现函数表达式 {exp} 解析");
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		internal override string ExpressionLambdaToSqlCallConvert(MethodCallExpression exp, List<SelectTableInfo> _tables, List<SelectColumnInfo> _selectColumnMap, Func<Expression[], string> getSelectGroupingMapString, SelectTableInfoType tbtype, bool isQuoteName) {
 | 
							internal override string ExpressionLambdaToSqlCallConvert(MethodCallExpression exp, List<SelectTableInfo> _tables, List<SelectColumnInfo> _selectColumnMap, Func<Expression[], string> getSelectGroupingMapString, SelectTableInfoType tbtype, bool isQuoteName) {
 | 
				
			||||||
			Func<Expression, string> getExp = exparg => ExpressionLambdaToSql(exparg, _tables, _selectColumnMap, getSelectGroupingMapString, tbtype, isQuoteName);
 | 
								Func<Expression, string> getExp = exparg => ExpressionLambdaToSql(exparg, _tables, _selectColumnMap, getSelectGroupingMapString, tbtype, isQuoteName);
 | 
				
			||||||
@@ -406,7 +406,7 @@ namespace FreeSql.PostgreSQL {
 | 
				
			|||||||
					case "ToUInt64": return $"({getExp(exp.Arguments[0])})::int8";
 | 
										case "ToUInt64": return $"({getExp(exp.Arguments[0])})::int8";
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			throw new Exception($"PostgreSQLExpression 未现实函数表达式 {exp} 解析");
 | 
								throw new Exception($"PostgreSQLExpression 未实现函数表达式 {exp} 解析");
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -169,7 +169,7 @@ namespace FreeSql.SqlServer {
 | 
				
			|||||||
					case "Equals": return $"({left} = {getExp(exp.Arguments[0])})";
 | 
										case "Equals": return $"({left} = {getExp(exp.Arguments[0])})";
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			throw new Exception($"SqlServerExpression 未现实函数表达式 {exp} 解析");
 | 
								throw new Exception($"SqlServerExpression 未实现函数表达式 {exp} 解析");
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		internal override string ExpressionLambdaToSqlCallMath(MethodCallExpression exp, List<SelectTableInfo> _tables, List<SelectColumnInfo> _selectColumnMap, Func<Expression[], string> getSelectGroupingMapString, SelectTableInfoType tbtype, bool isQuoteName) {
 | 
							internal override string ExpressionLambdaToSqlCallMath(MethodCallExpression exp, List<SelectTableInfo> _tables, List<SelectColumnInfo> _selectColumnMap, Func<Expression[], string> getSelectGroupingMapString, SelectTableInfoType tbtype, bool isQuoteName) {
 | 
				
			||||||
			Func<Expression, string> getExp = exparg => ExpressionLambdaToSql(exparg, _tables, _selectColumnMap, getSelectGroupingMapString, tbtype, isQuoteName);
 | 
								Func<Expression, string> getExp = exparg => ExpressionLambdaToSql(exparg, _tables, _selectColumnMap, getSelectGroupingMapString, tbtype, isQuoteName);
 | 
				
			||||||
@@ -195,7 +195,7 @@ namespace FreeSql.SqlServer {
 | 
				
			|||||||
				case "Atan2": return $"atan2({getExp(exp.Arguments[0])}, {getExp(exp.Arguments[1])})";
 | 
									case "Atan2": return $"atan2({getExp(exp.Arguments[0])}, {getExp(exp.Arguments[1])})";
 | 
				
			||||||
				case "Truncate": return $"floor({getExp(exp.Arguments[0])})";
 | 
									case "Truncate": return $"floor({getExp(exp.Arguments[0])})";
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			throw new Exception($"SqlServerExpression 未现实函数表达式 {exp} 解析");
 | 
								throw new Exception($"SqlServerExpression 未实现函数表达式 {exp} 解析");
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		internal override string ExpressionLambdaToSqlCallDateTime(MethodCallExpression exp, List<SelectTableInfo> _tables, List<SelectColumnInfo> _selectColumnMap, Func<Expression[], string> getSelectGroupingMapString, SelectTableInfoType tbtype, bool isQuoteName) {
 | 
							internal override string ExpressionLambdaToSqlCallDateTime(MethodCallExpression exp, List<SelectTableInfo> _tables, List<SelectColumnInfo> _selectColumnMap, Func<Expression[], string> getSelectGroupingMapString, SelectTableInfoType tbtype, bool isQuoteName) {
 | 
				
			||||||
			Func<Expression, string> getExp = exparg => ExpressionLambdaToSql(exparg, _tables, _selectColumnMap, getSelectGroupingMapString, tbtype, isQuoteName);
 | 
								Func<Expression, string> getExp = exparg => ExpressionLambdaToSql(exparg, _tables, _selectColumnMap, getSelectGroupingMapString, tbtype, isQuoteName);
 | 
				
			||||||
@@ -238,7 +238,7 @@ namespace FreeSql.SqlServer {
 | 
				
			|||||||
					case "ToString": return $"convert(varchar, {left}, 121)";
 | 
										case "ToString": return $"convert(varchar, {left}, 121)";
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			throw new Exception($"SqlServerExpression 未现实函数表达式 {exp} 解析");
 | 
								throw new Exception($"SqlServerExpression 未实现函数表达式 {exp} 解析");
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		internal override string ExpressionLambdaToSqlCallTimeSpan(MethodCallExpression exp, List<SelectTableInfo> _tables, List<SelectColumnInfo> _selectColumnMap, Func<Expression[], string> getSelectGroupingMapString, SelectTableInfoType tbtype, bool isQuoteName) {
 | 
							internal override string ExpressionLambdaToSqlCallTimeSpan(MethodCallExpression exp, List<SelectTableInfo> _tables, List<SelectColumnInfo> _selectColumnMap, Func<Expression[], string> getSelectGroupingMapString, SelectTableInfoType tbtype, bool isQuoteName) {
 | 
				
			||||||
			Func<Expression, string> getExp = exparg => ExpressionLambdaToSql(exparg, _tables, _selectColumnMap, getSelectGroupingMapString, tbtype, isQuoteName);
 | 
								Func<Expression, string> getExp = exparg => ExpressionLambdaToSql(exparg, _tables, _selectColumnMap, getSelectGroupingMapString, tbtype, isQuoteName);
 | 
				
			||||||
@@ -268,7 +268,7 @@ namespace FreeSql.SqlServer {
 | 
				
			|||||||
					case "ToString": return $"cast({left} as varchar)";
 | 
										case "ToString": return $"cast({left} as varchar)";
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			throw new Exception($"SqlServerExpression 未现实函数表达式 {exp} 解析");
 | 
								throw new Exception($"SqlServerExpression 未实现函数表达式 {exp} 解析");
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		internal override string ExpressionLambdaToSqlCallConvert(MethodCallExpression exp, List<SelectTableInfo> _tables, List<SelectColumnInfo> _selectColumnMap, Func<Expression[], string> getSelectGroupingMapString, SelectTableInfoType tbtype, bool isQuoteName) {
 | 
							internal override string ExpressionLambdaToSqlCallConvert(MethodCallExpression exp, List<SelectTableInfo> _tables, List<SelectColumnInfo> _selectColumnMap, Func<Expression[], string> getSelectGroupingMapString, SelectTableInfoType tbtype, bool isQuoteName) {
 | 
				
			||||||
			Func<Expression, string> getExp = exparg => ExpressionLambdaToSql(exparg, _tables, _selectColumnMap, getSelectGroupingMapString, tbtype, isQuoteName);
 | 
								Func<Expression, string> getExp = exparg => ExpressionLambdaToSql(exparg, _tables, _selectColumnMap, getSelectGroupingMapString, tbtype, isQuoteName);
 | 
				
			||||||
@@ -291,7 +291,7 @@ namespace FreeSql.SqlServer {
 | 
				
			|||||||
					case "ToUInt64": return $"cast({getExp(exp.Arguments[0])} as bigint)";
 | 
										case "ToUInt64": return $"cast({getExp(exp.Arguments[0])} as bigint)";
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			throw new Exception($"SqlServerExpression 未现实函数表达式 {exp} 解析");
 | 
								throw new Exception($"SqlServerExpression 未实现函数表达式 {exp} 解析");
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -192,7 +192,7 @@ namespace FreeSql.Sqlite {
 | 
				
			|||||||
					case "Equals": return $"({left} = {getExp(exp.Arguments[0])})";
 | 
										case "Equals": return $"({left} = {getExp(exp.Arguments[0])})";
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			throw new Exception($"SqliteExpression 未现实函数表达式 {exp} 解析");
 | 
								throw new Exception($"SqliteExpression 未实现函数表达式 {exp} 解析");
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		internal override string ExpressionLambdaToSqlCallMath(MethodCallExpression exp, List<SelectTableInfo> _tables, List<SelectColumnInfo> _selectColumnMap, Func<Expression[], string> getSelectGroupingMapString, SelectTableInfoType tbtype, bool isQuoteName) {
 | 
							internal override string ExpressionLambdaToSqlCallMath(MethodCallExpression exp, List<SelectTableInfo> _tables, List<SelectColumnInfo> _selectColumnMap, Func<Expression[], string> getSelectGroupingMapString, SelectTableInfoType tbtype, bool isQuoteName) {
 | 
				
			||||||
			Func<Expression, string> getExp = exparg => ExpressionLambdaToSql(exparg, _tables, _selectColumnMap, getSelectGroupingMapString, tbtype, isQuoteName);
 | 
								Func<Expression, string> getExp = exparg => ExpressionLambdaToSql(exparg, _tables, _selectColumnMap, getSelectGroupingMapString, tbtype, isQuoteName);
 | 
				
			||||||
@@ -218,7 +218,7 @@ namespace FreeSql.Sqlite {
 | 
				
			|||||||
				case "Atan2": return $"atan2({getExp(exp.Arguments[0])}, {getExp(exp.Arguments[1])})";
 | 
									case "Atan2": return $"atan2({getExp(exp.Arguments[0])}, {getExp(exp.Arguments[1])})";
 | 
				
			||||||
				//case "Truncate": return $"truncate({getExp(exp.Arguments[0])}, 0)";
 | 
									//case "Truncate": return $"truncate({getExp(exp.Arguments[0])}, 0)";
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			throw new Exception($"SqliteExpression 未现实函数表达式 {exp} 解析");
 | 
								throw new Exception($"SqliteExpression 未实现函数表达式 {exp} 解析");
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		internal override string ExpressionLambdaToSqlCallDateTime(MethodCallExpression exp, List<SelectTableInfo> _tables, List<SelectColumnInfo> _selectColumnMap, Func<Expression[], string> getSelectGroupingMapString, SelectTableInfoType tbtype, bool isQuoteName) {
 | 
							internal override string ExpressionLambdaToSqlCallDateTime(MethodCallExpression exp, List<SelectTableInfo> _tables, List<SelectColumnInfo> _selectColumnMap, Func<Expression[], string> getSelectGroupingMapString, SelectTableInfoType tbtype, bool isQuoteName) {
 | 
				
			||||||
			Func<Expression, string> getExp = exparg => ExpressionLambdaToSql(exparg, _tables, _selectColumnMap, getSelectGroupingMapString, tbtype, isQuoteName);
 | 
								Func<Expression, string> getExp = exparg => ExpressionLambdaToSql(exparg, _tables, _selectColumnMap, getSelectGroupingMapString, tbtype, isQuoteName);
 | 
				
			||||||
@@ -261,7 +261,7 @@ namespace FreeSql.Sqlite {
 | 
				
			|||||||
					case "ToString": return $"strftime('%Y-%m-%d %H:%M.%f',{left})";
 | 
										case "ToString": return $"strftime('%Y-%m-%d %H:%M.%f',{left})";
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			throw new Exception($"SqliteExpression 未现实函数表达式 {exp} 解析");
 | 
								throw new Exception($"SqliteExpression 未实现函数表达式 {exp} 解析");
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		internal override string ExpressionLambdaToSqlCallTimeSpan(MethodCallExpression exp, List<SelectTableInfo> _tables, List<SelectColumnInfo> _selectColumnMap, Func<Expression[], string> getSelectGroupingMapString, SelectTableInfoType tbtype, bool isQuoteName) {
 | 
							internal override string ExpressionLambdaToSqlCallTimeSpan(MethodCallExpression exp, List<SelectTableInfo> _tables, List<SelectColumnInfo> _selectColumnMap, Func<Expression[], string> getSelectGroupingMapString, SelectTableInfoType tbtype, bool isQuoteName) {
 | 
				
			||||||
			Func<Expression, string> getExp = exparg => ExpressionLambdaToSql(exparg, _tables, _selectColumnMap, getSelectGroupingMapString, tbtype, isQuoteName);
 | 
								Func<Expression, string> getExp = exparg => ExpressionLambdaToSql(exparg, _tables, _selectColumnMap, getSelectGroupingMapString, tbtype, isQuoteName);
 | 
				
			||||||
@@ -291,7 +291,7 @@ namespace FreeSql.Sqlite {
 | 
				
			|||||||
					case "ToString": return $"cast({left} as character)";
 | 
										case "ToString": return $"cast({left} as character)";
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			throw new Exception($"SqliteExpression 未现实函数表达式 {exp} 解析");
 | 
								throw new Exception($"SqliteExpression 未实现函数表达式 {exp} 解析");
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		internal override string ExpressionLambdaToSqlCallConvert(MethodCallExpression exp, List<SelectTableInfo> _tables, List<SelectColumnInfo> _selectColumnMap, Func<Expression[], string> getSelectGroupingMapString, SelectTableInfoType tbtype, bool isQuoteName) {
 | 
							internal override string ExpressionLambdaToSqlCallConvert(MethodCallExpression exp, List<SelectTableInfo> _tables, List<SelectColumnInfo> _selectColumnMap, Func<Expression[], string> getSelectGroupingMapString, SelectTableInfoType tbtype, bool isQuoteName) {
 | 
				
			||||||
			Func<Expression, string> getExp = exparg => ExpressionLambdaToSql(exparg, _tables, _selectColumnMap, getSelectGroupingMapString, tbtype, isQuoteName);
 | 
								Func<Expression, string> getExp = exparg => ExpressionLambdaToSql(exparg, _tables, _selectColumnMap, getSelectGroupingMapString, tbtype, isQuoteName);
 | 
				
			||||||
@@ -314,7 +314,7 @@ namespace FreeSql.Sqlite {
 | 
				
			|||||||
					case "ToUInt64": return $"cast({getExp(exp.Arguments[0])} as decimal(21,0))";
 | 
										case "ToUInt64": return $"cast({getExp(exp.Arguments[0])} as decimal(21,0))";
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			throw new Exception($"SqliteExpression 未现实函数表达式 {exp} 解析");
 | 
								throw new Exception($"SqliteExpression 未实现函数表达式 {exp} 解析");
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -18,7 +18,7 @@ var mysql = new FreeSql.FreeSqlBuilder()
 | 
				
			|||||||
    .UseConnectionString(FreeSql.DataType.MySql, "Data Source=127.0.0.1;Port=3306;User ID=root;Password=root;Initial Catalog=cccddd;Charset=utf8;SslMode=none;Max pool size=10")
 | 
					    .UseConnectionString(FreeSql.DataType.MySql, "Data Source=127.0.0.1;Port=3306;User ID=root;Password=root;Initial Catalog=cccddd;Charset=utf8;SslMode=none;Max pool size=10")
 | 
				
			||||||
    .Build();
 | 
					    .Build();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//创建模板生成类现实
 | 
					//创建模板生成类实现
 | 
				
			||||||
var gen = new FreeSql.Generator.TemplateGenerator();
 | 
					var gen = new FreeSql.Generator.TemplateGenerator();
 | 
				
			||||||
gen.Build(mysql.DbFirst, 
 | 
					gen.Build(mysql.DbFirst, 
 | 
				
			||||||
    @"C:\Users\28810\Desktop\github\FreeSql\Templates\MySql\simple-entity",  //模板目录(事先下载)
 | 
					    @"C:\Users\28810\Desktop\github\FreeSql\Templates\MySql\simple-entity",  //模板目录(事先下载)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -18,7 +18,7 @@ var mysql = new FreeSql.FreeSqlBuilder()
 | 
				
			|||||||
    .UseConnectionString(FreeSql.DataType.MySql, "Data Source=127.0.0.1;Port=3306;User ID=root;Password=root;Initial Catalog=cccddd;Charset=utf8;SslMode=none;Max pool size=10")
 | 
					    .UseConnectionString(FreeSql.DataType.MySql, "Data Source=127.0.0.1;Port=3306;User ID=root;Password=root;Initial Catalog=cccddd;Charset=utf8;SslMode=none;Max pool size=10")
 | 
				
			||||||
    .Build();
 | 
					    .Build();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//创建模板生成类现实
 | 
					//创建模板生成类实现
 | 
				
			||||||
var gen = new FreeSql.Generator.TemplateGenerator();
 | 
					var gen = new FreeSql.Generator.TemplateGenerator();
 | 
				
			||||||
gen.Build(mysql.DbFirst, 
 | 
					gen.Build(mysql.DbFirst, 
 | 
				
			||||||
    @"C:\Users\28810\Desktop\github\FreeSql\Templates\MySql\simple-entity",  //模板目录(事先下载)
 | 
					    @"C:\Users\28810\Desktop\github\FreeSql\Templates\MySql\simple-entity",  //模板目录(事先下载)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -18,7 +18,7 @@ var mysql = new FreeSql.FreeSqlBuilder()
 | 
				
			|||||||
    .UseConnectionString(FreeSql.DataType.MySql, "Data Source=127.0.0.1;Port=3306;User ID=root;Password=root;Initial Catalog=cccddd;Charset=utf8;SslMode=none;Max pool size=10")
 | 
					    .UseConnectionString(FreeSql.DataType.MySql, "Data Source=127.0.0.1;Port=3306;User ID=root;Password=root;Initial Catalog=cccddd;Charset=utf8;SslMode=none;Max pool size=10")
 | 
				
			||||||
    .Build();
 | 
					    .Build();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//创建模板生成类现实
 | 
					//创建模板生成类实现
 | 
				
			||||||
var gen = new FreeSql.Generator.TemplateGenerator();
 | 
					var gen = new FreeSql.Generator.TemplateGenerator();
 | 
				
			||||||
gen.Build(mysql.DbFirst, 
 | 
					gen.Build(mysql.DbFirst, 
 | 
				
			||||||
    @"C:\Users\28810\Desktop\github\FreeSql\Templates\MySql\simple-entity",  //模板目录(事先下载)
 | 
					    @"C:\Users\28810\Desktop\github\FreeSql\Templates\MySql\simple-entity",  //模板目录(事先下载)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -18,7 +18,7 @@ var mysql = new FreeSql.FreeSqlBuilder()
 | 
				
			|||||||
    .UseConnectionString(FreeSql.DataType.MySql, "Data Source=127.0.0.1;Port=3306;User ID=root;Password=root;Initial Catalog=cccddd;Charset=utf8;SslMode=none;Max pool size=10")
 | 
					    .UseConnectionString(FreeSql.DataType.MySql, "Data Source=127.0.0.1;Port=3306;User ID=root;Password=root;Initial Catalog=cccddd;Charset=utf8;SslMode=none;Max pool size=10")
 | 
				
			||||||
    .Build();
 | 
					    .Build();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//创建模板生成类现实
 | 
					//创建模板生成类实现
 | 
				
			||||||
var gen = new FreeSql.Generator.TemplateGenerator();
 | 
					var gen = new FreeSql.Generator.TemplateGenerator();
 | 
				
			||||||
gen.Build(mysql.DbFirst, 
 | 
					gen.Build(mysql.DbFirst, 
 | 
				
			||||||
    @"C:\Users\28810\Desktop\github\FreeSql\Templates\MySql\simple-entity",  //模板目录(事先下载)
 | 
					    @"C:\Users\28810\Desktop\github\FreeSql\Templates\MySql\simple-entity",  //模板目录(事先下载)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -18,7 +18,7 @@ var mysql = new FreeSql.FreeSqlBuilder()
 | 
				
			|||||||
    .UseConnectionString(FreeSql.DataType.MySql, "Data Source=127.0.0.1;Port=3306;User ID=root;Password=root;Initial Catalog=cccddd;Charset=utf8;SslMode=none;Max pool size=10")
 | 
					    .UseConnectionString(FreeSql.DataType.MySql, "Data Source=127.0.0.1;Port=3306;User ID=root;Password=root;Initial Catalog=cccddd;Charset=utf8;SslMode=none;Max pool size=10")
 | 
				
			||||||
    .Build();
 | 
					    .Build();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//创建模板生成类现实
 | 
					//创建模板生成类实现
 | 
				
			||||||
var gen = new FreeSql.Generator.TemplateGenerator();
 | 
					var gen = new FreeSql.Generator.TemplateGenerator();
 | 
				
			||||||
gen.Build(mysql.DbFirst, 
 | 
					gen.Build(mysql.DbFirst, 
 | 
				
			||||||
    @"C:\Users\28810\Desktop\github\FreeSql\Templates\MySql\simple-entity",  //模板目录(事先下载)
 | 
					    @"C:\Users\28810\Desktop\github\FreeSql\Templates\MySql\simple-entity",  //模板目录(事先下载)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -18,7 +18,7 @@ var mysql = new FreeSql.FreeSqlBuilder()
 | 
				
			|||||||
    .UseConnectionString(FreeSql.DataType.MySql, "Data Source=127.0.0.1;Port=3306;User ID=root;Password=root;Initial Catalog=cccddd;Charset=utf8;SslMode=none;Max pool size=10")
 | 
					    .UseConnectionString(FreeSql.DataType.MySql, "Data Source=127.0.0.1;Port=3306;User ID=root;Password=root;Initial Catalog=cccddd;Charset=utf8;SslMode=none;Max pool size=10")
 | 
				
			||||||
    .Build();
 | 
					    .Build();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//创建模板生成类现实
 | 
					//创建模板生成类实现
 | 
				
			||||||
var gen = new FreeSql.Generator.TemplateGenerator();
 | 
					var gen = new FreeSql.Generator.TemplateGenerator();
 | 
				
			||||||
gen.Build(mysql.DbFirst, 
 | 
					gen.Build(mysql.DbFirst, 
 | 
				
			||||||
    @"C:\Users\28810\Desktop\github\FreeSql\Templates\MySql\simple-entity",  //模板目录(事先下载)
 | 
					    @"C:\Users\28810\Desktop\github\FreeSql\Templates\MySql\simple-entity",  //模板目录(事先下载)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -18,7 +18,7 @@ var mysql = new FreeSql.FreeSqlBuilder()
 | 
				
			|||||||
    .UseConnectionString(FreeSql.DataType.MySql, "Data Source=127.0.0.1;Port=3306;User ID=root;Password=root;Initial Catalog=cccddd;Charset=utf8;SslMode=none;Max pool size=10")
 | 
					    .UseConnectionString(FreeSql.DataType.MySql, "Data Source=127.0.0.1;Port=3306;User ID=root;Password=root;Initial Catalog=cccddd;Charset=utf8;SslMode=none;Max pool size=10")
 | 
				
			||||||
    .Build();
 | 
					    .Build();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//创建模板生成类现实
 | 
					//创建模板生成类实现
 | 
				
			||||||
var gen = new FreeSql.Generator.TemplateGenerator();
 | 
					var gen = new FreeSql.Generator.TemplateGenerator();
 | 
				
			||||||
gen.Build(mysql.DbFirst, 
 | 
					gen.Build(mysql.DbFirst, 
 | 
				
			||||||
    @"C:\Users\28810\Desktop\github\FreeSql\Templates\MySql\simple-entity",  //模板目录(事先下载)
 | 
					    @"C:\Users\28810\Desktop\github\FreeSql\Templates\MySql\simple-entity",  //模板目录(事先下载)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -18,7 +18,7 @@ var mysql = new FreeSql.FreeSqlBuilder()
 | 
				
			|||||||
    .UseConnectionString(FreeSql.DataType.MySql, "Data Source=127.0.0.1;Port=3306;User ID=root;Password=root;Initial Catalog=cccddd;Charset=utf8;SslMode=none;Max pool size=10")
 | 
					    .UseConnectionString(FreeSql.DataType.MySql, "Data Source=127.0.0.1;Port=3306;User ID=root;Password=root;Initial Catalog=cccddd;Charset=utf8;SslMode=none;Max pool size=10")
 | 
				
			||||||
    .Build();
 | 
					    .Build();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//创建模板生成类现实
 | 
					//创建模板生成类实现
 | 
				
			||||||
var gen = new FreeSql.Generator.TemplateGenerator();
 | 
					var gen = new FreeSql.Generator.TemplateGenerator();
 | 
				
			||||||
gen.Build(mysql.DbFirst, 
 | 
					gen.Build(mysql.DbFirst, 
 | 
				
			||||||
    @"C:\Users\28810\Desktop\github\FreeSql\Templates\MySql\simple-entity",  //模板目录(事先下载)
 | 
					    @"C:\Users\28810\Desktop\github\FreeSql\Templates\MySql\simple-entity",  //模板目录(事先下载)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -18,7 +18,7 @@ var mysql = new FreeSql.FreeSqlBuilder()
 | 
				
			|||||||
    .UseConnectionString(FreeSql.DataType.MySql, "Data Source=127.0.0.1;Port=3306;User ID=root;Password=root;Initial Catalog=cccddd;Charset=utf8;SslMode=none;Max pool size=10")
 | 
					    .UseConnectionString(FreeSql.DataType.MySql, "Data Source=127.0.0.1;Port=3306;User ID=root;Password=root;Initial Catalog=cccddd;Charset=utf8;SslMode=none;Max pool size=10")
 | 
				
			||||||
    .Build();
 | 
					    .Build();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//创建模板生成类现实
 | 
					//创建模板生成类实现
 | 
				
			||||||
var gen = new FreeSql.Generator.TemplateGenerator();
 | 
					var gen = new FreeSql.Generator.TemplateGenerator();
 | 
				
			||||||
gen.Build(mysql.DbFirst, 
 | 
					gen.Build(mysql.DbFirst, 
 | 
				
			||||||
    @"C:\Users\28810\Desktop\github\FreeSql\Templates\MySql\simple-entity",  //模板目录(事先下载)
 | 
					    @"C:\Users\28810\Desktop\github\FreeSql\Templates\MySql\simple-entity",  //模板目录(事先下载)
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user