示例#1
0
        public void ProjectionAndGroupTest()
        {
            using var session = NHibernateHelper.OpenSession();
            var actual = session.CreateCriteria <Cat>()
                         .SetProjection(Projections.ProjectionList()
                                        .Add(Projections.RowCount())
                                        .Add(Projections.Avg("Weight"))
                                        .Add(Projections.Max("Weight"))
                                        .Add(Projections.GroupProperty("Sex")))
                         .List();

            var expected = _cats
                           .GroupBy(c => c.Sex)
                           .Select(x => new
            {
                Count = x.Count(),
                Avg   = x.Average(c => c.Weight),
                Max   = x.Max(c => c.Weight),
                Sex   = x.Key,
            })
                           .ToList();

            actual.Count.ShouldBe(expected.Count);
            foreach (var item in actual)
            {
                var row          = (item as IList);
                var expectedItem = expected.First(c => c.Sex == (char)row[3]);
                row[0].ShouldBe(expectedItem.Count);
                Math.Round((double)row[1], 3).ShouldBe(Math.Round(expectedItem.Avg, 3));
                Math.Round((float)row[2], 3).ShouldBe(Math.Round(expectedItem.Max, 3));
            }
        }
示例#2
0
        /// <summary>
        /// Gets aggregate activity for each specified transport company.
        /// </summary>
        /// <param name="desde"></param>
        /// <param name="hasta"></param>
        /// <param name="ids"></param>
        /// <returns></returns>
        public IEnumerable <TransportActivity> GetTransportActivities(DateTime desde, DateTime hasta, List <int> ids)
        {
            TransportActivity ta = null;

            DetachedCriteria dc = GetDatamartDetachedCriteria(ids.ToArray()).FilterBeginBetween(desde, hasta);

            ProjectionList pl = Projections.ProjectionList();

            pl.Add(Projections.Sum <Datamart>(dm => dm.MovementHours).WithAlias(() => ta.HsActivos));
            pl.Add(Projections.Sum <Datamart>(dm => dm.StoppedHours).WithAlias(() => ta.HsInactivos));
            pl.Add(Projections.Sum <Datamart>(dm => dm.InfractionMinutes).WithAlias(() => ta.HsInfraccion));
            pl.Add(Projections.Sum <Datamart>(dm => dm.Infractions).WithAlias(() => ta.Infracciones));
            pl.Add(Projections.Sum <Datamart>(dm => dm.Kilometers).WithAlias(() => ta.Recorrido));
            pl.Add(Projections.Max <Datamart>(dm => dm.MaxSpeed).WithAlias(() => ta.VelocidadMaxima));
            pl.Add(Projections.Avg <Datamart>(dm => dm.AverageSpeed).WithAlias(() => ta.VelocidadPromedio));
            pl.Add(Projections.Group <Datamart>(dm => dm.Vehicle.Id).WithAlias(() => ta.IdVehiculo));

            ICriteria crit = GetDatamartCriteria(0, dc, pl, null, typeof(TransportActivity));
            IList <TransportActivity> results = crit.List <TransportActivity>();

            var cocheDAO = new CocheDAO();

            foreach (TransportActivity r in results)
            {
                Coche coche = cocheDAO.FindById(r.Id);
                r.HsInfraccion  /= 60;
                r.Transport      = coche.Transportista.Descripcion;
                r.CentroDeCostos = coche.CentroDeCostos != null ? coche.CentroDeCostos.Descripcion : null;
                r.TipoVehiculo   = coche.TipoCoche != null ? coche.TipoCoche.Descripcion : null;
            }
            return(results);
        }
示例#3
0
        public void TestReturnedOperations()
        {
            ProjectionExitOperationFactory factory = ProjectionExitOperationFactory.GetFactory();
            var sessionFactory = Mock <ISessionFactoryImplementor>();

            using (Mocks.Record())
            {
            }
            using (Mocks.Playback())
            {
                Assert.IsInstanceOf(typeof(RowCountExitOperation),
                                    factory.GetProjectionExitOperation(Projections.RowCount(), sessionFactory));
                Assert.IsInstanceOf(typeof(AggregateExitOperation),
                                    factory.GetProjectionExitOperation(Projections.Max("foo"), sessionFactory));
                Assert.IsInstanceOf(typeof(AggregateExitOperation),
                                    factory.GetProjectionExitOperation(Projections.Min("foo"), sessionFactory));
                Assert.IsInstanceOf(typeof(AggregateExitOperation),
                                    factory.GetProjectionExitOperation(Projections.Sum("foo"), sessionFactory));
                try
                {
                    factory.GetProjectionExitOperation(Projections.Avg("foo"), sessionFactory);
                    Assert.Fail("example of one that we don't yet support");
                }
                catch (ArgumentException e)
                {
                    // good
                }
            }
        }
示例#4
0
        public void ProjectionsExpressions()
        {
            IProjection p = Projections.Avg("StudentNumber");

            NHAssert.IsSerializable(p);
            p = Projections.Count("StudentNumber");
            NHAssert.IsSerializable(p);
            p = Projections.CountDistinct("StudentNumber");
            NHAssert.IsSerializable(p);
            p = Projections.GroupProperty("Name");
            NHAssert.IsSerializable(p);
            p = Projections.Id();
            NHAssert.IsSerializable(p);
            p = Projections.Max("StudentNumber");
            NHAssert.IsSerializable(p);
            p = Projections.Min("StudentNumber");
            NHAssert.IsSerializable(p);
            p = Projections.Property("StudentNumber");
            NHAssert.IsSerializable(p);
            p = Projections.RowCount();
            NHAssert.IsSerializable(p);
            p = Projections.Sum("StudentNumber");
            NHAssert.IsSerializable(p);

            p = Projections.Alias(Projections.Count("StudentNumber"), "alias");
            NHAssert.IsSerializable(p);
            p = Projections.Distinct(Projections.Id());
            NHAssert.IsSerializable(p);
            p = Projections.ProjectionList().Add(Projections.Max("StudentNumber"));
            NHAssert.IsSerializable(p);
        }
示例#5
0
        public IEnumerable <RechazoPromedioRolModel> GetPromedioPorRol(int distritoId, int baseId)
        {
            RechazoMov    mov       = null;
            Empleado      empEgreso = null;
            TipoEmpleado  tEmpleado = null;
            TicketRechazo ticket    = null;

            var q = Session
                    .QueryOver(() => mov)
                    .Inner.JoinAlias(() => mov.EmpledoEgreso, () => empEgreso)
                    .Left.JoinAlias(() => empEgreso.TipoEmpleado, () => tEmpleado)
                    .Inner.JoinAlias(() => mov.Ticket, () => ticket)
                    .Select(Projections.ProjectionList()
                            .Add(Projections.Count(() => mov.Id).As("Cantidad"))
                            .Add(Projections.Avg(() => mov.Lapso).As("Promedio"))
                            .Add(Projections.Group(() => tEmpleado.Codigo).As("TipoEmpleado"))
                            );

            if (distritoId != -1)
            {
                q = q.Where(m => ticket.Empresa.Id == distritoId);
            }

            if (baseId != -1)
            {
                q = q.Where(m => ticket.Linea.Id == baseId);
            }

            q = q.TransformUsing(Transformers.AliasToBean <RechazoPromedioRolModel>());

            return(q.Future <RechazoPromedioRolModel>());
        }
示例#6
0
        public List <long> GetTubineBladesWithMaxTempInAVGorMAX()
        {
            using (ITransaction transaction = session.BeginTransaction())
            {
                List <long>  results           = null;
                TurbineBlade turbineBladeAlias = null;

                QueryOver <TurbineBlade> subqueryAVG =
                    QueryOver.Of <TurbineBlade>()
                    .SelectList(list => list.SelectMax(tb => tb.MaxTemp));

                QueryOver <TurbineBlade> subqueryMAX =
                    QueryOver.Of <TurbineBlade>()
                    .SelectList(list => list.SelectMax(tb => tb.MaxTemp));

                QueryOver <TurbineBlade> subqueryAVGMAX =
                    QueryOver.Of <TurbineBlade>(() => turbineBladeAlias)
                    .Select(Projections.Avg(Projections.Property(() => turbineBladeAlias.MaxTemp)))
                    .Select(Projections.Max(Projections.Property(() => turbineBladeAlias.MaxTemp)));

                results = session.QueryOver <TurbineBlade>(() => turbineBladeAlias)
                          //.Where(() => turbineBladeAlias.MaxTemp.IsIn(new object[] {subqueryMAX, subqueryAVG}))
                          .WithSubquery
                          .WhereProperty(() => turbineBladeAlias.MaxTemp).In(subqueryAVGMAX)
                          .Select(tb => tb.Id)
                          .List <long>().ToList();


                transaction.Commit();
                return(results);
            }
        }
示例#7
0
        public IEnumerable <PromedioPorEstadoModel> GetPromedioPorEstado(int distritoId, int baseId)
        {
            RechazoMov    mov    = null;
            TicketRechazo ticket = null;

            var q = Session
                    .QueryOver(() => mov)
                    .Inner.JoinAlias(() => mov.Ticket, () => ticket)
                    .Select(Projections.ProjectionList()
                            .Add(Projections.Count(() => mov.Id).As("Cantidad"))
                            .Add(Projections.Avg(() => mov.Lapso).As("Promedio"))
                            .Add(Projections.Group(() => mov.EstadoEgreso).As("EstadoEnum"))
                            .Add(Projections.Group(() => ticket.Empresa.Id).As("EmpresaId"))
                            .Add(Projections.Group(() => ticket.Linea.Id).As("BaseId"))
                            ).OrderBy(Projections.Avg(() => mov.Lapso).As("Promedio")).Desc;

            if (distritoId != -1)
            {
                q = q.Where(m => ticket.Empresa.Id == distritoId);
            }

            if (baseId != -1)
            {
                q = q.Where(m => ticket.Linea.Id == baseId);
            }

            q = q.TransformUsing(Transformers.AliasToBean <PromedioPorEstadoModel>());

            return(q.Future <PromedioPorEstadoModel>());
        }
示例#8
0
        public IEnumerable <ValoresDiarios> GetAggregatesDiarios(int dispositivo, string sensorCode, DateTime desde, DateTime hasta)
        {
            var sensorDao = new SensorDAO();
            var sensor    = sensorDao.FindByCode(dispositivo, sensorCode);

            if (sensor == null)
            {
                return(new List <ValoresDiarios>(0));
            }

            ValoresDiarios valoresDiarios = null;
            var            byDate         = Projections.SqlFunction("date", NHibernateUtil.Date,
                                                                    Projections.Group <Medicion>(a => a.FechaMedicion));

            return(Session.QueryOver <Medicion>()
                   .Where(m => m.Dispositivo.Id == dispositivo && m.Sensor.Id == sensor.Id)
                   .And(m => m.FechaMedicion >= desde && m.FechaMedicion <= hasta)
                   .SelectList(x => x
                               .Select(Projections.Max <Medicion>(m => m.ValorNum1).WithAlias(() => valoresDiarios.Max))
                               .Select(Projections.Min <Medicion>(m => m.ValorNum1).WithAlias(() => valoresDiarios.Min))
                               .Select(Projections.Avg <Medicion>(m => m.ValorNum1).WithAlias(() => valoresDiarios.Avg))
                               .Select(Projections.GroupProperty(byDate).WithAlias(() => valoresDiarios.Date))
                               )
                   .OrderBy(byDate).Asc
                   .TransformUsing(Transformers.AliasToBean <ValoresDiarios>())
                   .List <ValoresDiarios>());
        }
示例#9
0
        public void DetachQueryAsSubqueryTest()
        {
            using var session = NHibernateHelper.OpenSession();

            var avgWeight = DetachedCriteria
                            .For <Cat>()
                            .SetProjection(Projections.Avg("Weight"));
            var actual = session
                         .CreateCriteria <Cat>()
                         .Add(Subqueries.PropertyGt("Weight", avgWeight))
                         .List <Cat>();

            var avgWeightExpected = _cats.Average(c => c.Weight);
            var expected          = _cats.Where(c => c.Weight > avgWeightExpected);

            AssertTwoListContainSameItems(actual.Select(c => c.Id), expected.Select(c => c.Id));

            var weights = DetachedCriteria
                          .For <Cat>()
                          .SetProjection(Projections.Property("Weight"));

            actual = session
                     .CreateCriteria <Cat>()
                     .Add(Subqueries.PropertyGeAll("Weight", weights))
                     .List <Cat>();
            var expectedCat = _cats.OrderByDescending(c => c.Weight).First();

            actual.Count.ShouldBe(1);
            actual.First().Id.ShouldBe(expectedCat.Id);
        }
        public void average()
        {
            var averageItemsInStock = Session.QueryOver <Product>()
                                      .Select(Projections.Avg <Product>(p => p.UnitsInStock))
                                      .SingleOrDefault <double>();

            Assert.AreEqual(_products.Average(p => p.UnitsInStock), averageItemsInStock);
        }
        public decimal GetAverageMoviePrice()
        {
            var result = _session.QueryOver <Movie>()
                         .Select(Projections.Avg <Movie>(m => m.UnitPrice))
                         .SingleOrDefault <double>();

            return(Convert.ToDecimal(result));
        }
        public void call_stored_procedure_that_returns_non_entity_value()
        {
            var averageSalary = Session.QueryOver <Employee>()
                                .Select(Projections.Avg <Employee>(e => e.Salary))
                                .SingleOrDefault <double>();

            Assert.AreEqual(averageSalary, Session.GetNamedQuery("GET_AVERAGE_SALARY").UniqueResult());
        }
示例#13
0
        public void average()
        {
            var averageItemsInStock = Session.CreateCriteria <Product>()
                                      .SetProjection(Projections.Avg("UnitsInStock"))
                                      .UniqueResult <double>();

            Assert.AreEqual(_products.Average(p => p.UnitsInStock), averageItemsInStock);
        }
示例#14
0
        public IList <User> GeAvgAgeUsers()
        {
            var crit           = session.CreateCriteria <User>();
            var detachCriteria = DetachedCriteria.For <User>() //подзапрос
                                 .SetProjection(Projections.Avg("Age"));

            crit.Add(Subqueries.PropertyGe("Age", detachCriteria));
            return(crit.List <User>());
        }
        public List <ProductStatisticWeekly> CalculateStatistic(int week, int year, Period period)
        {
            int interval = 0;

            if (Convert.ToInt32(period) == 1)
            {
                interval = 4;
            }
            else if (Convert.ToInt32(period) == 2)
            {
                interval = 8;
            }
            else if (Convert.ToInt32(period) == 3)
            {
                interval = 13;
            }
            else if (Convert.ToInt32(period) == 4)
            {
                interval = 26;
            }
            else if (Convert.ToInt32(period) == 5)
            {
                interval = 53;
            }

            ICriteria crit = GetCriteria();

            int weekDif = (week - interval);

            if (weekDif <= 0)
            {
                Disjunction dis = new Disjunction();
                dis.Add(
                    new AndExpression(new BetweenExpression("Week", 53 + weekDif, 53),
                                      new EqExpression("Year", year - 1)));
                dis.Add(new AndExpression(new BetweenExpression("Week", 1, week), new EqExpression("Year", year)));
                crit.Add(dis);
            }
            else
            {
                crit.Add(
                    new AndExpression(new BetweenExpression("Week", week - interval, week),
                                      new EqExpression("Year", year)));
            }

            crit.SetProjection(Projections.ProjectionList()
                               .Add(Projections.Avg("Purchase"))
                               .Add(Projections.Avg("Sale"))
                               .Add(Projections.GroupProperty("ProductID"))
                               );

            crit.SetResultTransformer(
                new AliasToBeanConstructorResultTransformer(typeof(ProductStatisticWeekly).GetConstructors()[1]));

            return(crit.List <ProductStatisticWeekly>() as List <ProductStatisticWeekly>);
        }
示例#16
0
        public TResult Avg <TEntity, TResult>(string propertyName, IWhereGetter where = null) where TEntity : class
        {
            var iCriteria = this.Session.CreateCriteria <TEntity>();

            iCriteria.SetProjection(Projections.Avg(propertyName));
            iCriteria = QueryParameterHelper.Add(iCriteria, where);
            var result = iCriteria.UniqueResult <TResult>();

            return(result);
        }
        public IList <User> GeAvgAgeUsers()
        {
            var crit           = session.CreateCriteria <User>();
            var detachCriteria = DetachedCriteria.For <User>()
                                 .SetProjection(Projections.Avg("Age"));

            crit.Add(Subqueries.PropertyGe("Age", detachCriteria));
            return(crit.List <User>());
            //"select * from User where Age >= (select avg(Age) from User)"
        }
示例#18
0
        public BatchCompletionStatus GetCompletionStatus(BatchRun batchRun)
        {
            IFutureValue <decimal?> timeTaken =
                GetResultsQuery(batchRun)
                .Where(result => result.MillisecondsTaken != null)
                .Select(Projections.Sum <BatchRunResult>(result => result.MillisecondsTaken))
                .Cacheable()
                .FutureValue <decimal?>();
            IFutureValue <double?> averageTimeTaken =
                GetResultsQuery(batchRun)
                .Where(result => result.MillisecondsTaken != null)
                .Select(Projections.Avg <BatchRunResult>(result => result.MillisecondsTaken))
                .Cacheable()
                .FutureValue <double?>();
            IFutureValue <int> pending =
                GetResultsQuery(batchRun)
                .Where(result => result.Status == JobExecutionStatus.Pending)
                .Select(Projections.Count <BatchRunResult>(result => result.Id))
                .Cacheable()
                .FutureValue <int>();
            IFutureValue <int> failed =
                GetResultsQuery(batchRun)
                .Where(result => result.Status == JobExecutionStatus.Failed)
                .Select(Projections.Count <BatchRunResult>(result => result.Id))
                .Cacheable()
                .FutureValue <int>();
            IFutureValue <int> succeeded =
                GetResultsQuery(batchRun)
                .Where(result => result.Status == JobExecutionStatus.Succeeded)
                .Select(Projections.Count <BatchRunResult>(result => result.Id))
                .Cacheable()
                .FutureValue <int>();
            IFutureValue <int> total =
                GetResultsQuery(batchRun)
                .Select(Projections.Count <BatchRunResult>(result => result.Id))
                .Cacheable()
                .FutureValue <int>();


            double averageTime   = averageTimeTaken.Value.GetValueOrDefault();
            int    pendingNumber = pending.Value;

            return(new BatchCompletionStatus
            {
                Total = total.Value,
                Failed = failed.Value,
                Pending = pendingNumber,
                Succeeded = succeeded.Value,
                TimeTaken = TimeSpan.FromMilliseconds(Convert.ToDouble(timeTaken.Value.GetValueOrDefault())),
                AverageTimeTaken = averageTime.ToString("0.00ms"),
                EstimatedTimeRemaining = TimeSpan.FromMilliseconds(averageTime * pendingNumber)
            });
        }
示例#19
0
        public void Test_Avg()
        {
            DetachedCriteria expected =
                DetachedCriteria.For <Person>()
                .SetProjection(Projections.Avg("Age"));

            DetachedCriteria actual =
                DetachedCriteria.For <Person>()
                .SetProjection(LambdaProjection.Avg <Person>(p => p.Age));

            AssertCriteriaAreEqual(expected, actual);
        }
        public void DifferentProjections()
        {
            ICriteria expected =
                CreateTestCriteria(typeof(Person))
                .SetProjection(Projections.Avg("Age"));

            ICriteria actual =
                CreateTestCriteria(typeof(Person))
                .SetProjection(Projections.Max("Age"));

            AssertCriteriaAreNotEqual(expected, actual);
        }
示例#21
0
        public void TestAvgUsingAlias()
        {
            DetachedCriteria expected =
                DetachedCriteria.For <Person>("personAlias")
                .SetProjection(Projections.Avg("personAlias.Age"));

            Person           personAlias = null;
            DetachedCriteria actual      =
                DetachedCriteria <Person> .Create(() => personAlias)
                .SetProjection(LambdaProjection.Avg(() => personAlias.Age));

            AssertCriteriaAreEqual(expected, actual);
        }
示例#22
0
文件: Fixture.cs 项目: jrauber/GH1429
 public async Task CanAvgProjectionOnSqlFunctionAsync()
 {
     using (ISession s = OpenSession())
     {
         ISQLFunction arithmaticAddition = new VarArgsSQLFunction("(", "+", ")");
         ICriteria    c =
             s.CreateCriteria(typeof(Person)).SetProjection(
                 Projections.Avg(Projections.SqlFunction(arithmaticAddition, NHibernateUtil.GuessType(typeof(double)),
                                                         Projections.Property("IQ"), Projections.Property("ShoeSize"))));
         IList list = await(c.ListAsync());
         Assert.AreEqual(((double)334) / 5, list[0]);
     }
 }
        public void InlineProjectionList()
        {
            ICriteria expected =
                CreateTestCriteria(typeof(Person), "personAlias")
                .SetProjection(Projections.ProjectionList()
                               .Add(Projections.Alias(Projections.Avg("Age"), "personAgeProjectionAlias"))
                               .Add(Projections.Avg("Age"))
                               .Add(Projections.Avg("personAlias.Age"), "Age")
                               .Add(Projections.Count("Age"))
                               .Add(Projections.Count("personAlias.Age"))
                               .Add(Projections.CountDistinct("Age"))
                               .Add(Projections.CountDistinct("personAlias.Age"))
                               .Add(Projections.GroupProperty("Age"))
                               .Add(Projections.GroupProperty("personAlias.Age"))
                               .Add(Projections.Max("Age"))
                               .Add(Projections.Max("personAlias.Age"))
                               .Add(Projections.Min("Age"))
                               .Add(Projections.Min("personAlias.Age"))
                               .Add(Projections.Property("Age"))
                               .Add(Projections.Property("personAlias.Age"))
                               .Add(Projections.SubQuery(DetachedCriteriaAge))
                               .Add(Projections.Sum("Age"))
                               .Add(Projections.Sum("personAlias.Age")));

            Person personAlias = null;
            Person personAgeProjectionAlias = null;
            var    actual =
                CreateTestQueryOver <Person>(() => personAlias)
                .SelectList(list => list
                            .SelectAvg(p => p.Age).WithAlias(() => personAgeProjectionAlias)
                            .Select(Projections.Avg("Age"))                     // allows private properties
                            .SelectAvg(() => personAlias.Age).WithAlias(() => personAlias.Age)
                            .SelectCount(p => p.Age)
                            .SelectCount(() => personAlias.Age)
                            .SelectCountDistinct(p => p.Age)
                            .SelectCountDistinct(() => personAlias.Age)
                            .SelectGroup(p => p.Age)
                            .SelectGroup(() => personAlias.Age)
                            .SelectMax(p => p.Age)
                            .SelectMax(() => personAlias.Age)
                            .SelectMin(p => p.Age)
                            .SelectMin(() => personAlias.Age)
                            .Select(p => p.Age)
                            .Select(() => personAlias.Age)
                            .SelectSubQuery(DetachedQueryOverAge)
                            .SelectSum(p => p.Age)
                            .SelectSum(() => personAlias.Age));

            AssertCriteriaAreEqual(expected, actual);
        }
        public void ArbitraryProjections()
        {
            ICriteria expected =
                CreateTestCriteria(typeof(Person), "personAlias")
                .SetProjection(Projections.ProjectionList()
                               .Add(Projections.Alias(Projections.Avg("Age"), "personAgeProjectionAlias"))
                               .Add(Projections.Avg("Age"), "personAgeProjectionAlias")
                               .Add(Projections.Avg("personAlias.Age"), "Age")
                               .Add(Projections.Count("Age"))
                               .Add(Projections.Count("personAlias.Age"))
                               .Add(Projections.CountDistinct("Age"))
                               .Add(Projections.CountDistinct("personAlias.Age"))
                               .Add(Projections.GroupProperty("Age"))
                               .Add(Projections.GroupProperty("personAlias.Age"))
                               .Add(Projections.Max("Age"))
                               .Add(Projections.Max("personAlias.Age"))
                               .Add(Projections.Min("Age"))
                               .Add(Projections.Min("personAlias.Age"))
                               .Add(Projections.Property("Age"))
                               .Add(Projections.Property("personAlias.Age"))
                               .Add(Projections.SubQuery(DetachedCriteriaAge))
                               .Add(Projections.Sum("Age"))
                               .Add(Projections.Sum("personAlias.Age")));

            Person personAlias = null;
            Person personAgeProjectionAlias = null;
            var    actual =
                CreateTestQueryOver <Person>(() => personAlias)
                .Select(Projections.ProjectionList()
                        .Add(Projections.Avg <Person>(p => p.Age).WithAlias(() => personAgeProjectionAlias))
                        .Add(Projections.Avg <Person>(p => p.Age), () => personAgeProjectionAlias)
                        .Add(Projections.Avg(() => personAlias.Age).WithAlias(() => personAlias.Age))
                        .Add(Projections.Count <Person>(p => p.Age))
                        .Add(Projections.Count(() => personAlias.Age))
                        .Add(Projections.CountDistinct <Person>(p => p.Age))
                        .Add(Projections.CountDistinct(() => personAlias.Age))
                        .Add(Projections.Group <Person>(p => p.Age))
                        .Add(Projections.Group(() => personAlias.Age))
                        .Add(Projections.Max <Person>(p => p.Age))
                        .Add(Projections.Max(() => personAlias.Age))
                        .Add(Projections.Min <Person>(p => p.Age))
                        .Add(Projections.Min(() => personAlias.Age))
                        .Add(Projections.Property <Person>(p => p.Age))
                        .Add(Projections.Property(() => personAlias.Age))
                        .Add(Projections.SubQuery(DetachedQueryOverAge))
                        .Add(Projections.Sum <Person>(p => p.Age))
                        .Add(Projections.Sum(() => personAlias.Age)));

            AssertCriteriaAreEqual(expected, actual);
        }
        public void HavingOnLtAverage()
        {
            using (ISession s = OpenSession())
                using (ITransaction tx = s.BeginTransaction())
                {
                    //Find the iq that two people share
                    string name = s.CreateCriteria(typeof(Person))
                                  .SetProjection(Projections.GroupProperty("Name"))
                                  .Add(Restrictions.Lt(Projections.Avg("IQ"), 20))
                                  .UniqueResult <string>();

                    Assert.AreEqual("Joe", name);
                    tx.Commit();
                }
        }
示例#26
0
        static void ICriteriaTest(ISessionFactory sessionFactory)
        {
            Console.WriteLine("Running ICriteria sample");
            using (ISession session = sessionFactory.OpenSession())
            {
                var salary = session.CreateCriteria(typeof(Employee))
                             .Add(Restrictions.Between("Age", 25, 30))
                             .SetProjection(Projections.Avg("Salary"))
                             .UniqueResult <double>();

                Console.WriteLine(salary);
                Console.WriteLine();
                Console.WriteLine();
            }
        }
示例#27
0
        public void AvgTest()
        {
            ISession    session    = factory.OpenSession();
            IProjection expression = Projections.Avg("Pay");

            CreateObjects(typeof(Simple), session);
            IType nhType = NHibernateUtil.GuessType(typeof(double));

            SqlType[] sqlTypes      = nhType.SqlTypes(this.factoryImpl);
            string    sqlTypeString = factoryImpl.Dialect.GetCastTypeName(sqlTypes[0]);
            SqlString sqlString     = expression.ToSqlString(criteria, 0, criteriaQuery);
            string    expectedSql   = string.Format("avg(cast(sql_alias.Pay as {0})) as y0_", sqlTypeString);

            CompareSqlStrings(sqlString, expectedSql, 0);
            session.Close();
        }
示例#28
0
        public List <SaleOrderItem> PendingSaleOrderQuantity(DateTime startdate)
        {
            ICriteria crit = GetCriteria();

            crit.Add(new GtPropertyExpression("Quantity", "QuantityDelivery"));
            crit.CreateCriteria("SaleOrder").Add(new GeExpression("Date", startdate));

            crit.SetProjection(Projections.ProjectionList()
                               .Add(Projections.Sum("Quantity"))
                               .Add(Projections.Avg("QuantityDelivery"))
                               .Add(Projections.GroupProperty("Product"))
                               );

            crit.SetResultTransformer(
                new AliasToBeanConstructorResultTransformer(typeof(SaleOrderItem).GetConstructors()[2]));

            return(crit.List <SaleOrderItem>() as List <SaleOrderItem>);
        }
示例#29
0
 public void AvgWithConditionalDoesNotThrow()
 {
     using (var session = OpenSession())
         using (session.BeginTransaction())
         {
             MappingEntity mappingEntity = null;
             Assert.DoesNotThrow(
                 () =>
                 session.QueryOver <Entity>().SelectList(
                     builder =>
                     builder.Select(
                         Projections.Avg(
                             Projections.Conditional(
                                 Restrictions.Eq(Projections.Property <Entity>(x => x.Name), "FOO"),
                                 Projections.Constant("", NHibernateUtil.String),
                                 Projections.Constant(null, NHibernateUtil.String))).WithAlias(() => mappingEntity.Count))
                     ).TransformUsing(Transformers.AliasToBean <MappingEntity>()).List <MappingEntity>()
                 );
         }
 }
示例#30
0
        public void QueryTestWithStrongTypeReturnValue()
        {
            using (ISession session = OpenSession())
            {
                ICriteria c = session.CreateCriteria(typeof(ProjectionTestClass));

                NHibernate.Transform.IResultTransformer trans = new NHibernate.Transform.AliasToBeanConstructorResultTransformer(
                    typeof(ProjectionReport).GetConstructors()[0]
                    );

                c.SetProjection(Projections.ProjectionList()
                                .Add(Projections.Avg("Pay"))
                                .Add(Projections.Max("Pay"))
                                .Add(Projections.Min("Pay")));
                c.SetResultTransformer(trans);
                ProjectionReport report = c.UniqueResult <ProjectionReport>();
                Assert.AreEqual(report.AvgPay, 2.5);
                Assert.AreEqual(report.MaxPay, 4);
                Assert.AreEqual(report.MinPay, 1);
            }
        }