From 63dccf3e4c0c2542fd4aaaa813a9f0187ef5c647 Mon Sep 17 00:00:00 2001 From: 28810 <28810@YEXIANGQIN> Date: Sat, 19 Sep 2020 07:26:24 +0800 Subject: [PATCH] optimize internal methods --- .../SelectProvider/Select0Provider.cs | 86 +++++++++---------- 1 file changed, 43 insertions(+), 43 deletions(-) diff --git a/FreeSql/Internal/CommonProvider/SelectProvider/Select0Provider.cs b/FreeSql/Internal/CommonProvider/SelectProvider/Select0Provider.cs index d8ca14e4..4a9a4066 100644 --- a/FreeSql/Internal/CommonProvider/SelectProvider/Select0Provider.cs +++ b/FreeSql/Internal/CommonProvider/SelectProvider/Select0Provider.cs @@ -124,6 +124,49 @@ namespace FreeSql.Internal.CommonProvider to._whereCascadeExpression = new List(from._whereCascadeExpression.ToArray()); to._whereGlobalFilter = new List(from._whereGlobalFilter.ToArray()); } + + public Expression ConvertStringPropertyToExpression(string property) + { + if (string.IsNullOrEmpty(property)) return null; + var field = property.Split('.').Select(a => a.Trim()).ToArray(); + Expression exp = null; + + if (field.Length == 1) + { + foreach (var tb in _tables) + { + if (tb.Table.ColumnsByCs.TryGetValue(field[0], out var col) && + tb.Table.Properties.TryGetValue(field[0], out var prop)) + { + tb.Parameter = Expression.Parameter(tb.Table.Type, tb.Alias); + exp = Expression.MakeMemberAccess(tb.Parameter, prop); + break; + } + } + if (exp == null) throw new Exception($"无法匹配 {property}"); + } + else + { + var firstTb = _tables[0]; + var firstTbs = _tables.Where(a => a.AliasInit == field[0]).ToArray(); + if (firstTbs.Length == 1) firstTb = firstTbs[0]; + + firstTb.Parameter = Expression.Parameter(firstTb.Table.Type, firstTb.Alias); + var currentType = firstTb.Table.Type; + Expression currentExp = firstTb.Parameter; + + for (var x = 0; x < field.Length; x++) + { + var tmp1 = field[x]; + if (_commonUtils.GetTableByEntity(currentType).Properties.TryGetValue(tmp1, out var prop) == false) + throw new ArgumentException($"{currentType.DisplayCsharp()} 无法找到属性名 {tmp1}"); + currentType = prop.PropertyType; + currentExp = Expression.MakeMemberAccess(currentExp, prop); + } + exp = currentExp; + } + return exp; + } } public abstract partial class Select0Provider : Select0Provider, ISelect0 where TSelect : class where T1 : class @@ -442,49 +485,6 @@ namespace FreeSql.Internal.CommonProvider return this as TSelect; } - public Expression ConvertStringPropertyToExpression(string property) - { - if (string.IsNullOrEmpty(property)) return null; - var field = property.Split('.').Select(a => a.Trim()).ToArray(); - Expression exp = null; - - if (field.Length == 1) - { - foreach (var tb in _tables) - { - if (tb.Table.ColumnsByCs.TryGetValue(field[0], out var col) && - tb.Table.Properties.TryGetValue(field[0], out var prop)) - { - tb.Parameter = Expression.Parameter(tb.Table.Type, tb.Alias); - exp = Expression.MakeMemberAccess(tb.Parameter, prop); - break; - } - } - if (exp == null) throw new Exception($"无法匹配 {property}"); - } - else - { - var firstTb = _tables[0]; - var firstTbs = _tables.Where(a => a.AliasInit == field[0]).ToArray(); - if (firstTbs.Length == 1) firstTb = firstTbs[0]; - - firstTb.Parameter = Expression.Parameter(firstTb.Table.Type, firstTb.Alias); - var currentType = firstTb.Table.Type; - Expression currentExp = firstTb.Parameter; - - for (var x = 0; x < field.Length; x++) - { - var tmp1 = field[x]; - if (_commonUtils.GetTableByEntity(currentType).Properties.TryGetValue(tmp1, out var prop) == false) - throw new ArgumentException($"{currentType.DisplayCsharp()} 无法找到属性名 {tmp1}"); - currentType = prop.PropertyType; - currentExp = Expression.MakeMemberAccess(currentExp, prop); - } - exp = currentExp; - } - return exp; - } - public TSelect OrderByPropertyName(string property, bool isAscending = true) => OrderByPropertyNameIf(true, property, isAscending); public TSelect OrderByPropertyNameIf(bool condition, string property, bool isAscending = true) {