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(); }
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); }
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)); }
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); }