SqlSugar.ResolveExpress.GetExpressionRightFieldByNT C# (CSharp) Method

GetExpressionRightFieldByNT() public method

获取拉姆达表达式的字段值多个T模式
public GetExpressionRightFieldByNT ( Expression exp, SqlSugarClient db ) : string
exp System.Linq.Expressions.Expression
db SqlSugarClient 数据库访问对象
return string
        public string GetExpressionRightFieldByNT(Expression exp, SqlSugarClient db)
        {
            DB = db;
            string reval = "";
            LambdaExpression lambda = exp as LambdaExpression;
            var isConvet = lambda.Body.NodeType.IsIn(ExpressionType.Convert);
            var isMember = lambda.Body.NodeType.IsIn(ExpressionType.MemberAccess);
            if (!isConvet && !isMember)
            {
                throw new SqlSugarException(FileldErrorMessage);
            }
            try
            {
                if (isConvet)
                {
                    var memberExpr = ((UnaryExpression)lambda.Body).Operand as MemberExpression;
                    reval= memberExpr.ToString();
                }
                else//isMember
                {
                    reval= lambda.Body.ToString();
                }
            }
            catch (Exception)
            {
                 throw new SqlSugarException(FileldErrorMessage);
            }
            if (DB != null && DB.IsEnableAttributeMapping && DB._mappingColumns.IsValuable())
            {
                if (DB._mappingColumns.Any(it => reval.EndsWith("."+it.Key)))
                {
                    var preName = reval.Split('.').First();
                    var dbName = DB._mappingColumns.Single(it => reval.EndsWith("." + it.Key)).Value;
                    return preName+"."+dbName;
                }
            }
            return reval;
        }

Usage Example

        /// <summary>
        /// 排序
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <typeparam name="T2"></typeparam>
        /// <param name="queryable"></param>
        /// <param name="expression">例如 (s1,s2)=>s1.id,相当于 order by s1.id</param>
        /// <param name="type"></param>
        /// <returns></returns>
        public static Queryable <T> OrderBy <T, T2>(this Queryable <T> queryable, Expression <Func <T, T2, object> > expression, OrderByType type = OrderByType.asc)
        {
            ResolveExpress re    = new ResolveExpress();
            var            field = re.GetExpressionRightFieldByNT(expression);
            var            pre   = queryable.OrderBy.IsValuable() ? "," : "";

            queryable.OrderBy += pre + field + " " + type.ToString().ToUpper();
            return(queryable);
        }
All Usage Examples Of SqlSugar.ResolveExpress::GetExpressionRightFieldByNT