示例#1
0
        static private void OverAndAliasQuery()
        {
            esAlias aliasCompany = null, aliasPeriod = null, aliasAmount = null, aliasItemCount = null;

            OrdersCollection coll = new OrdersQuery("q", out var q)
                                    .From <OrdersQuery>(out var sub, () => // mimic a CTE
            {
                // Nested Query
                return(new OrdersQuery("o", out var o)
                       .InnerJoin <CustomersQuery>("c", out var c).On(c.CustomerID == o.CustomerID)
                       .InnerJoin <OrderDetailsQuery>("od", out var od).On(od.OrderID == o.OrderID)
                       .Select
                       (
                           // We're going to grab the aliased columns here for re-use in the outer query later
                           o.Count().As("TotalItems", out aliasItemCount),
                           c.CompanyName.As("CompanyName", out aliasCompany),
                           o.OrderDate.DatePart("year").As("Period", out aliasPeriod),
                           ((1.00M - od.Discount) * od.UnitPrice * od.Quantity).Cast(esCastType.Decimal, 19, 2).Sum().Round(2).As("Amount", out aliasAmount)
                       )
                       .GroupBy(c.CompanyName, o.OrderDate.DatePart("year")));
            }).As("sub")
                                    // Now act on "sub" query columns
                                    .Select(
                aliasCompany(), aliasPeriod(), aliasAmount(), aliasItemCount(),
                q.Over.Sum(aliasAmount()).PartitionBy(aliasCompany()).OrderBy(aliasPeriod().Ascending).Rows.UnBoundedPreceding.As("CumulativeAmount"),
                q.Over.Sum(aliasAmount()).PartitionBy(aliasCompany()).As("TotalAmount")
                )
                                    .OrderBy(aliasCompany().Ascending, aliasPeriod().Ascending)
                                    .ToCollection <OrdersCollection>();

            if (coll.Count > 0)
            {
                // we loaded data
            }
        }
示例#2
0
        internal esQueryItem As(string alias, out esAlias aliasFunc)
        {
            aliasFunc = () =>
            {
                esQueryItem aliasedItem = new esQueryItem(this.query, alias, esSystemType.Unassigned);
                aliasedItem.Column.IsOutVar = true;
                return(aliasedItem);
            };

            _alias = alias;
            return(aliasFunc());
        }
示例#3
0
        static private void OverAndAliasQuerySimple()
        {
            esAlias rowNumber = null;

            OrdersCollection coll = new OrdersQuery("o", out var o)
                                    .From <OrderDetailsQuery>(out var od, () =>
            {
                // Nested Query
                return(new OrderDetailsQuery("od", out var subQuery)
                       .Select
                       (
                           subQuery.Over.RowNumber().OrderBy(subQuery.OrderID.Descending).As("RowNumber", out rowNumber)
                       )
                       .GroupBy(subQuery.OrderID));
            }).As("sub")
                                    .Select(rowNumber())
                                    .Where(rowNumber() > 5)
                                    .ToCollection <OrdersCollection>();

            if (coll.Count > 0)
            {
                // Then we loaded at least one record
            }
        }
示例#4
0
 public IOverClause As(string alias, out esAlias aliasedItem)
 {
     this.overClause.As(alias, out aliasedItem);
     return(this.overClause);
 }