public override SqlFragment Visit(DbCaseExpression expression) { CaseFragment c = new CaseFragment(); Debug.Assert(expression.When.Count == expression.Then.Count); for (int i = 0; i < expression.When.Count; ++i) { c.When.Add(expression.When[i].Accept(this)); c.Then.Add(expression.Then[i].Accept(this)); } if (expression.Else != null && !(expression.Else is DbNullExpression)) { c.Else = expression.Else.Accept(this); } return(c); }
public void Visit(CaseFragment f) { }
public override SqlFragment Visit(DbGroupByExpression expression) { // first process the input DbGroupExpressionBinding e = expression.Input; SelectStatement innerSelect = VisitInputExpressionEnsureSelect(e.Expression, e.VariableName, e.VariableType); scope.Add(e.GroupVariableName, innerSelect); SelectStatement select = WrapIfNotCompatible(innerSelect, expression.ExpressionKind); CollectionType ct = (CollectionType)expression.ResultType.EdmType; RowType rt = (RowType)ct.TypeUsage.EdmType; int propIndex = 0; foreach (DbExpression key in expression.Keys) { #region Correção devexpress var fragment = key.Accept(this); // correção devexpress if (fragment is LiteralFragment) { if ((fragment as LiteralFragment).Literal != "0") { select.AddGroupBy(fragment); } } else { select.AddGroupBy(fragment); } propIndex++; var colFragment = fragment as ColumnFragment; if (colFragment != null) { // correção devexpress if (fragment is LiteralFragment) { if ((fragment as LiteralFragment).Literal != "0") { colFragment = colFragment.Clone(); colFragment.ColumnAlias = String.Format("K{0}", propIndex); select.Columns.Add(colFragment); } } else { colFragment = colFragment.Clone(); colFragment.ColumnAlias = String.Format("K{0}", propIndex); select.Columns.Add(colFragment); } } else { if (fragment is FunctionFragment) { FunctionFragment funFrag = fragment as FunctionFragment; colFragment = new ColumnFragment(null, null); colFragment.ColumnAlias = String.Format("K{0}", propIndex); colFragment.Literal = funFrag; select.Columns.Add(colFragment); } else if (fragment is CaseFragment) { CaseFragment caseFrag = fragment as CaseFragment; colFragment = new ColumnFragment(null, null); colFragment.ColumnAlias = String.Format("K{0}", propIndex); colFragment.Literal = caseFrag; select.Columns.Add(colFragment); } } #endregion #region Original //var fragment = key.Accept(this); //select.AddGroupBy(fragment); //propIndex++; //var colFragment = fragment as ColumnFragment; //if (colFragment != null) //{ // colFragment = colFragment.Clone(); // colFragment.ColumnAlias = String.Format("K{0}", propIndex); // select.Columns.Add(colFragment); //} #endregion } for (int agg = 0; agg < expression.Aggregates.Count; agg++) { DbAggregate a = expression.Aggregates[agg]; DbFunctionAggregate fa = a as DbFunctionAggregate; if (fa == null) { throw new NotSupportedException(); } string alias = rt.Properties[propIndex++].Name; ColumnFragment functionCol = new ColumnFragment(null, null); functionCol.Literal = HandleFunction(fa, a.Arguments[0].Accept(this)); functionCol.ColumnAlias = alias; select.Columns.Add(functionCol); } return(select); }