public static void Render <T>(IEnumerable <ResultOrderingModel> orderBy, StringBuilder sb)
        {
            var olist = orderBy?.ToList();

            if ((olist == null) || (olist.Count == 0))
            {
                return;
            }

            sb.Append(" ORDER BY ");

            for (var i = 0; i < olist.Count; i++)
            {
                if (i > 0)
                {
                    sb.Append(", ");
                }

                var order = olist[i];

                var propchain = ExpressionsHelper.GetPropertiesChainText <T>(ExpressionsHelper.RemoveConvert(order.Expression));
                if (string.IsNullOrWhiteSpace(propchain))
                {
                    throw new InvalidOperationException($"Invalid OrderBy expression {order.Expression}");
                }

                var tabAndCol = DotPathHelper.SplitToEntityAndAttribute(propchain);

                sb.Append($"[{tabAndCol.Item1}].[{tabAndCol.Item2}]");

                sb.Append(order.Ascending ? " ASC" : " DESC");
            }

            sb.AppendLine();
        }
Example #2
0
        public IQueryBuilder <T> Join <T2>(Expression <Func <T, T2> > expression)
        {
            var path = ExpressionsHelper.GetPropertiesChainText <T>(expression);

            if (string.IsNullOrWhiteSpace(path))
            {
                throw new InvalidOperationException($"Invalid join expression {expression}");
            }
            Include(path);

            return(this);
        }
Example #3
0
        protected override IQuerySegment MapMemberExpression(MemberExpression expression)
        {
            var propChain = ExpressionsHelper.GetPropertiesChainText <T>(expression);

            if (string.IsNullOrWhiteSpace(propChain))
            {
                throw new NotSupportedException($"Unsupported expression {expression}");
            }

            var tableAndColumn = DotPathHelper.SplitToEntityAndAttribute(propChain);

            var tableAlias = tableAndColumn.Item1;
            var column     = tableAndColumn.Item2;

            return(new ColumnSegment(tableAlias, column));
        }
Example #4
0
        public void TestExpressionEvaluation()
        {
            Expression <Func <IEntity1, IEntity1> > exp = e => e.A.B.C;
            var strExp = ExpressionsHelper.GetPropertiesChainText <IEntity1>(exp);

            Assert.Equal("IEntity1.A.B.C", strExp);

            Expression <Func <IEntity1, object> > oexp = e => e.X.Each().Y;

            strExp = ExpressionsHelper.GetPropertiesChainText <IEntity1>(oexp);
            Assert.Equal("IEntity1.X.Y", strExp);

            oexp   = e => e.X.OrderBy(i => i.Id).Each().Y;
            strExp = ExpressionsHelper.GetPropertiesChainText <IEntity1>(oexp);
            Assert.Null(strExp);

            var v = 123;
            Expression <Func <IEntity1, int> > iexp = e => v + 5;

            strExp = ExpressionsHelper.GetPropertiesChainText <IEntity1>(iexp);
            Assert.Null(strExp);
        }