public void GetLcsTestSortMasterField()
        {
            IQueryable <Кошка>        queryList = new List <Кошка>().AsQueryable();
            IOrderedQueryable <Кошка> query     = from pn in queryList
                                                  orderby pn.Порода.Название ascending
                                                  select pn;
            Expression queryExpression = query.Expression;
            var        expected        = new LoadingCustomizationStruct(null)
            {
                ColumnsSort =
                    new[]
                {
                    new ColumnsSortDef(Information.ExtractPropertyPath <Кошка>(c => c.Порода.Название), SortOrder.Asc)
                }
            };

            LoadingCustomizationStruct actual = LinqToLcs.GetLcs(queryExpression, Кошка.Views.КошкаE);

            Assert.True(Equals(expected, actual));

            IQueryable <Кошка>         query2           = (from pn in queryList select pn).OrderBy(pn => pn.Порода == null ? null : pn.Порода.Название);
            Expression                 queryExpression2 = query2.Expression;
            LoadingCustomizationStruct actual2          = LinqToLcs.GetLcs(queryExpression2, Кошка.Views.КошкаE);

            Assert.True(Equals(expected, actual2));
        }
        public void LoadingObjectLoadObjectsTest()
        {
            // TODO: Обработать после выполнения задачи 4009

            var dataService = new MSSQLDataService();

            dataService.CustomizationString = ConfigurationManager.ConnectionStrings["TestAppNormal"]
                                              .ConnectionString;

            // Создание тестовой записи.
            var тестовыйМедведь = new Медведь()
            {
                ПорядковыйНомер = 15, Вес = 39
            };

            dataService.UpdateObject(тестовыйМедведь);

            var view = new View {
                DefineClassType = typeof(Медведь)
            };

            view.AddProperties(
                new string[1]
            {
                "ВычислимоеПоле"
            });

            // Загрузка объектов.
            IQueryable <Медведь> dataМедведи =
                dataService.Query <Медведь>(view).Where(w => w.__PrimaryKey == тестовыйМедведь.__PrimaryKey);


            var lcs = LinqToLcs.GetLcs(dataМедведи.Expression, view);

            lcs.View         = view;
            lcs.LoadingTypes = new[] { typeof(Медведь) };
            lcs.ReturnType   = LcsReturnType.Objects;

            // Загрузка данных без создания объктов.
            var медведи = dataService.LoadObjects(lcs);

            Assert.True(1 == медведи.Length, "Запись должна быть одна.");
            foreach (var stringDataView in медведи)
            {
                int fieldSum = ((Медведь)stringDataView).ВычислимоеПоле;
                Assert.True(54 == fieldSum, "ВычислимоеПоле");
            }

            Assert.True(1 == dataМедведи.Count(), "Запись должна быть одна.");
            foreach (var медведь in dataМедведи)
            {
                Assert.True(1 == медведь.ВычислимоеПоле, "ВычислимоеПоле");
            }

            // Удаление тестовой записи.
            тестовыйМедведь.SetStatus(ObjectStatus.Deleted);
            dataService.UpdateObject(тестовыйМедведь);
        }
        public void LoadingObjectLoadStringedObjectViewTest()
        {
            // TODO: Обработать после выполнения задачи 4009

            var dataService = new MSSQLDataService();

            dataService.CustomizationString = "SERVER=rtc-storm;Trusted_connection=yes;DATABASE=dochitka_test;";

            // Cоздание тестовой записи.
            var тестовыйМедведь = new Медведь()
            {
                ПорядковыйНомер = 15, Вес = 39
            };

            dataService.UpdateObject(тестовыйМедведь);

            var view = new View {
                DefineClassType = typeof(Медведь)
            };

            view.AddProperties(
                new string[1]
            {
                "ВычислимоеПоле"
            });

            // Загрузка объектов.
            IQueryable <Медведь> dataМедведи =
                dataService.Query <Медведь>(view).Where(w => w.__PrimaryKey == тестовыйМедведь.__PrimaryKey);


            var lcs = LinqToLcs.GetLcs(dataМедведи.Expression, view);

            lcs.View         = view;
            lcs.LoadingTypes = new[] { typeof(Медведь) };
            lcs.ReturnType   = LcsReturnType.Objects;

            // Загрузка данных без создания объктов.
            var медведи = dataService.LoadStringedObjectView('\t', lcs);

            Assert.True(1 == медведи.Length, "Запись должна быть одна.");
            foreach (var stringDataView in медведи)
            {
                int fieldSum = Int32.Parse(stringDataView.ObjectedData[0].ToString());
                Assert.True(54 == fieldSum, "ВычислимоеПоле");
            }

            Assert.True(1 == dataМедведи.Count(), "Запись должна быть одна.");
            foreach (var медведь in dataМедведи)
            {
                Assert.True(54 == медведь.ВычислимоеПоле, "ВычислимоеПоле");
            }

            // Удаление тестовой записи.
            тестовыйМедведь.SetStatus(ObjectStatus.Deleted);
            dataService.UpdateObject(тестовыйМедведь);
        }
        public void GetLcsTestStringEqualsWithDynamicView()
        {
            var query           = from pn in new List <Кошка>().AsQueryable() where pn.Кличка.Equals("Кошка") select pn;
            var queryExpression = query.Expression;
            var actual          = LinqToLcs.GetLcs(queryExpression, typeof(Кошка));

            Assert.NotNull(actual.View);
            Assert.Equal(1, actual.View.Properties.Count());
            Assert.Equal(Information.ExtractPropertyPath <Кошка>(x => x.Кличка), actual.View.Properties[0].Name);
        }
        /// <summary>
        /// Здесь лучше всего писать бизнес-логику, оперируя только объектом данных.
        /// </summary>
        protected override void PreApplyToControls()
        {
            var ds     = (SQLDataService)DataServiceProvider.DataService;
            var emp    = ds.Query <Employee>(Employee.Views.EmployeeL);
            var chiefs = from e in emp
                         where (e.male && !e.spouse) || !e.male
                         select e;

            ctrlEmployee.LimitFunction = LinqToLcs.GetLcs(chiefs.Expression, Employee.Views.EmployeeL).LimitFunction;
        }
예제 #6
0
        /// <summary>
        /// Здесь лучше всего писать бизнес-логику, оперируя только объектом данных.
        /// </summary>
        protected override void PreApplyToControls()
        {
            // *** Start programmer edit section *** (Using statements)
            ctrlОрганизация.PropertyToShow = Information.ExtractPropertyPath <Организация>(t => t.Актуальность);
            var ds = (SQLDataService)DataServiceProvider.DataService;
            var actualOrganizations = ds.Query <Организация>(Организация.Views.ОрганизацияL).Where(t => t.Актуальность);

            ctrlОрганизация.LimitFunction =
                LinqToLcs.GetLcs(actualOrganizations.Expression, Организация.Views.ОрганизацияL).LimitFunction;
            // *** End programmer edit section *** (Using statements)
        }
        public void LcsDynamicViewTestForSimpleFunction()
        {
            var testProvider = new TestLcsQueryProvider <Кошка>();

            new Query <Кошка>(testProvider).Where(k => k.Кличка == "кошка").ToList();
            Expression queryExpression = testProvider.InnerExpression;

            var result = LinqToLcs.GetLcs <Кошка>(queryExpression);

            // Проверка, что использованное свойство есть в представлении
            Assert.True(result.View.CheckPropname(КличкаName));
        }
        public void LcsDynamicViewTestForDetail()
        {
            var testProvider = new TestLcsQueryProvider <Кошка>();

            new Query <Кошка>(testProvider).Where(k => k.Лапа.Cast <Лапа>().Any(l => l.азмер > 5)).ToList();
            Expression queryExpression = testProvider.InnerExpression;

            var result = LinqToLcs.GetLcs <Кошка>(queryExpression);

            Assert.True(result.View.Details.Any(d => d.Name.Equals(ЛапаName)));
            Assert.True(result.View.GetDetail(ЛапаName).View.CheckPropname(азмерName));
        }
        public void GetLcsTestBooleanVariableDefWithDynamicView()
        {
            var testProvider = new TestLcsQueryProvider <ТипЛапы>();

            new Query <ТипЛапы>(testProvider).Where(o => o.Актуально).ToList();
            var queryExpression = testProvider.InnerExpression;
            var actual          = LinqToLcs.GetLcs(queryExpression, typeof(ТипЛапы));

            Assert.NotNull(actual.View);
            Assert.Equal(1, actual.View.Properties.Count());
            Assert.Equal(Information.ExtractPropertyPath <ТипЛапы>(x => x.Актуально), actual.View.Properties[0].Name);
        }
        public void TestUseGuidPropertyWithDynamicView()
        {
            var testProvider = new TestLcsQueryProvider <Кошка>();

            new Query <Кошка>(testProvider).Where(o => o.Ключ == "{72FCA622-A01E-494C-BE1C-0821178594FB}").ToArray();
            var queryExpression = testProvider.InnerExpression;
            var actual          = LinqToLcs.GetLcs(queryExpression, typeof(Кошка));

            Assert.NotNull(actual.View);
            Assert.Equal(1, actual.View.Properties.Count());
            Assert.Equal(Information.ExtractPropertyPath <Кошка>(x => x.Ключ), actual.View.Properties[0].Name);
        }
        /// <summary>
        /// Вызывается самым первым в Page_Load.
        /// </summary>
        protected override void Preload()
        {
            ctrlEmployeeTake.MasterViewName = Employee.Views.EmployeeL.Name;

            // Забрать велосипед может только директор или менеджер.
            var ds       = DataServiceProvider.DataService;
            var queryEmp = ds.Query <Employee>(Employee.Views.EmployeeL.Name)
                           .Where(item => item.Position.Equals(Positions.Директор) || item.Position.Equals(Positions.Менеджер));

            ctrlEmployeeTake.LimitFunction = LinqToLcs.GetLcs(
                queryEmp.Expression, Employee.Views.EmployeeL).LimitFunction;
        }
예제 #12
0
        public void GetLcsTest9()
        {
            IQueryable <Кошка> queryList       = new List <Кошка>().AsQueryable();
            IQueryable <Кошка> query           = (from pn in queryList select pn).Take(1);
            Expression         queryExpression = query.Expression;
            var expected = new LoadingCustomizationStruct(null)
            {
                ReturnTop = 1
            };
            LoadingCustomizationStruct actual = LinqToLcs.GetLcs(queryExpression, Utils.GetDefaultView(typeof(Кошка)));

            Assert.True(Equals(expected, actual));
        }
예제 #13
0
        /// <summary>
        /// Пример получения функции ограничения из LINQ-запроса для Flexberry ORM.
        /// </summary>
        static void GetLimitFunctionFromLcs()
        {
            var ds        = (SQLDataService)DataServiceProvider.DataService;
            var goodsC    = ds.Query <Товар>(Товар.Views.ТоварL.Name).Where(t => t.КодТовара == 33);
            var goodLimit = LinqToLcs.GetLcs(goodsC.Expression, Товар.Views.ТоварL).LimitFunction;

            var lcs = LoadingCustomizationStruct.GetSimpleStruct(typeof(Товар), Товар.Views.ТоварL);

            lcs.LimitFunction = goodLimit;
            var good = ds.LoadObjects(lcs).Cast <Товар>().FirstOrDefault();

            Console.WriteLine($"Название: {good?.Название}");
        }
        public void LcsDynamicViewTestForMaster()
        {
            var strGuid = Guid.NewGuid().ToString();

            var testProvider = new TestLcsQueryProvider <Кошка>();

            new Query <Кошка>(testProvider).Where(k => k.Порода.__PrimaryKey.ToString() == strGuid).ToList();
            Expression queryExpression = testProvider.InnerExpression;

            var result = LinqToLcs.GetLcs <Кошка>(queryExpression);

            Assert.True(result.View.Properties.Any(m => m.Name.Equals(ПородаName)));
        }
        public void GetLcsTestDataObjectWithDynamicView()
        {
            var порода       = new Порода();
            var testProvider = new TestLcsQueryProvider <Кошка>();

            new Query <Кошка>(testProvider).Where(o => порода.Equals(o.Порода)).ToArray();
            var queryExpression = testProvider.InnerExpression;
            var actual          = LinqToLcs.GetLcs(queryExpression, typeof(Кошка));

            Assert.NotNull(actual.View);
            Assert.Equal(1, actual.View.Properties.Count());
            Assert.Equal(Information.ExtractPropertyPath <Кошка>(x => x.Порода), actual.View.Properties[0].Name);
        }
        /// <summary>
        /// Вызывается самым первым в Page_Load.
        /// </summary>
        protected override void Preload()
        {
            WebObjectListView1.DataObjectTypes   = new[] { typeof(RentSession) };
            WebObjectListView1.View              = RentSession.Views.TakeBicycleL;
            WebObjectListView1.Operations.New    = false;
            WebObjectListView1.Operations.Delete = false;

            var ds    = DataServiceProvider.DataService;
            var query = ds.Query <RentSession>(RentSession.Views.TakeBicycleL.Name)
                        .Where(item => item.SessionState.Equals(SessionState.Открыта));

            WebObjectListView1.LimitFunction = LinqToLcs.GetLcs(
                query.Expression, RentSession.Views.TakeBicycleL).LimitFunction;
        }
        public void GetLcsTestDateTimeNowWithDynamicView()
        {
            var testProvider = new TestLcsQueryProvider <Перелом>();

            new Query <Перелом>(testProvider).Where(o => o.Дата <= DateTime.Now).ToArray();
            var queryExpression = testProvider.InnerExpression;
            var actual          = LinqToLcs.GetLcs(queryExpression, typeof(Перелом));

            Assert.NotNull(actual.View);

            // Свойства 2, поскольку если есть агрегирующее свойство, то оно обязательно включается.
            Assert.Equal(2, actual.View.Properties.Count());
            Assert.True(actual.View.Properties.Select(x => x.Name).Contains(Information.ExtractPropertyPath <Перелом>(x => x.Дата)));
        }
        public void GetLcsTestNullableCharWithDynamicView()
        {
            var testProvider = new TestLcsQueryProvider <Лапа>();

            new Query <Лапа>(testProvider).Where(x => x.азмерNullableChar == null).ToList();
            var queryExpression = testProvider.InnerExpression;
            var actual          = LinqToLcs.GetLcs(queryExpression, typeof(Лапа));

            Assert.NotNull(actual.View);

            // Свойства 2, поскольку если есть агрегирующее свойство, то оно обязательно включается.
            Assert.Equal(2, actual.View.Properties.Count());
            Assert.True(actual.View.Properties.Select(x => x.Name).Contains(Information.ExtractPropertyPath <Лапа>(x => x.азмерNullableChar)));
        }
        public void GetLcsTestNullableIntWithNull3()
        {
            var testProvider = new TestLcsQueryProvider <Лапа>();

            new Query <Лапа>(testProvider).Where(x => x.азмерNullableInt > null).ToList();
            Expression queryExpression        = testProvider.InnerExpression;
            LoadingCustomizationStruct actual = LinqToLcs.GetLcs(queryExpression, Utils.GetDefaultView(typeof(Лапа)));

            var expected = new LoadingCustomizationStruct(null)
            {
                LimitFunction = ldef.GetFunction(ldef.funcNOT, this.ldef.GetFunction(this.ldef.paramTrue))
            };

            Assert.True(Equals(expected, actual));
        }
예제 #20
0
        /// <summary>
        /// Здесь лучше всего писать бизнес-логику, оперируя только объектом данных.
        /// </summary>
        protected override void PreApplyToControls()
        {
            var ds        = (SQLDataService)DataServiceProvider.DataService;
            var actualCar = ds.Query <Машина>(Машина.Views.МашинаL).Where(k => k.Актуально);

            ctrlМашина.LimitFunction = LinqToLcs.GetLcs(actualCar.Expression, Машина.Views.МашинаL).LimitFunction;

            var actualWarehouse = ds.Query <Склад>(Склад.Views.СкладL).Where(k => k.Актуально);

            ctrlСклад.LimitFunction = LinqToLcs.GetLcs(actualWarehouse.Expression, Склад.Views.СкладL).LimitFunction;

            var actualGood = ds.Query <Товар>(Товар.Views.ТоварL).Where(k => k.Актуально);

            ctrlТовар.LimitFunction = LinqToLcs.GetLcs(actualGood.Expression, Товар.Views.ТоварL).LimitFunction;
        }
        public void LcsDynamicViewTestForSecondaryDetail()
        {
            var testProvider = new TestLcsQueryProvider <Кошка>();
            var закрытый     = ТипПерелома.Закрытый;

            new Query <Кошка>(testProvider).Where(k => k.Лапа.Cast <Лапа>().Any(l => l.Перелом.Cast <Перелом>()
                                                                                .Any(p => p.Тип == закрытый))).ToList();
            Expression queryExpression = testProvider.InnerExpression;

            var result = LinqToLcs.GetLcs <Кошка>(queryExpression);

            Assert.True(result.View.Details.Any(d => d.Name.Equals(ЛапаName)));
            Assert.True(result.View.GetDetail(ЛапаName).View.Details.Any(d => d.Name.Equals(ПереломName)));
            Assert.True(result.View.GetDetail(ЛапаName).View.GetDetail(ПереломName).View.CheckPropname(ТипName));
        }
        public void GetLcsByDetailLimitTestWrongDetail()
        {
            var exception = Xunit.Record.Exception(() =>
            {
                var testProvider = new TestLcsQueryProvider <Кошка>();
                new Query <Порода>(testProvider).Where <Порода, Кошка>(
                    Information.GetView("КошкаE", typeof(Кошка)),
                    y => y.Any()).ToList();
                Expression queryExpression        = testProvider.InnerExpression;
                LoadingCustomizationStruct actual = LinqToLcs.GetLcs(queryExpression, Utils.GetDefaultView(typeof(Порода)));
                Assert.True(false, "Создано ограничение по упрощённой схеме для ненастоящего детейла.");
            });

            Assert.IsType(typeof(NotFoundAggregatorProperty), exception);
        }
        public void GetLcsTestEndsWithException()
        {
            var exception = Xunit.Record.Exception(() =>
            {
                const string Pattern         = "ка";
                IQueryable <Кошка> queryList = new List <Кошка>().AsQueryable();
                IQueryable <Кошка> query     = from pn in queryList
                                               where pn.Кличка.EndsWith(Pattern, StringComparison.OrdinalIgnoreCase)
                                               select pn;
                Expression queryExpression = query.Expression;
                LinqToLcs.GetLcs(queryExpression, Utils.GetDefaultView(typeof(Кошка)));
            });

            Assert.IsType(typeof(MethodSignatureException), exception);
        }
예제 #24
0
        public void GetLcsTest5()
        {
            const int         Age             = 0;
            IQueryable <Лапа> queryList       = new List <Лапа>().AsQueryable();
            IQueryable <Лапа> query           = from pn in queryList where pn.Номер <= Age select pn;
            Expression        queryExpression = query.Expression;
            var expected = new LoadingCustomizationStruct(null)
            {
                LimitFunction =
                    this.ldef.GetFunction(this.ldef.funcLEQ, new VariableDef(this.ldef.NumericType, "Номер"), Age)
            };
            LoadingCustomizationStruct actual = LinqToLcs.GetLcs(queryExpression, Utils.GetDefaultView(typeof(Лапа)));

            Assert.True(Equals(expected, actual));
        }
        public void GetLcsTestDataObjectWithDynamicView2()
        {
            var порода = new Порода {
                Название = "тест"
            };
            var testProvider = new TestLcsQueryProvider <Кошка>();

            new Query <Кошка>(testProvider).Where(o => o.Порода.Название.Equals(порода.Название)).ToArray();
            var queryExpression = testProvider.InnerExpression;
            var actual          = LinqToLcs.GetLcs(queryExpression, typeof(Кошка));

            Assert.NotNull(actual.View);
            Assert.Equal(2, actual.View.Properties.Count());
            Assert.True(actual.View.Properties.Select(x => x.Name).Contains(Information.ExtractPropertyPath <Кошка>(x => x.Порода)));
            Assert.True(actual.View.Properties.Select(x => x.Name).Contains(Information.ExtractPropertyPath <Кошка>(x => x.Порода.Название)));
        }
        public void GetLcsTestLike()
        {
            var pattern = "sdf";
            IQueryable <Кошка> queryList       = new List <Кошка>().AsQueryable();
            IQueryable <Кошка> query           = from pn in queryList where pn.Кличка.IsLike(pattern) select pn;
            Expression         queryExpression = query.Expression;
            var expected = new LoadingCustomizationStruct(null)
            {
                LimitFunction =
                    ldef.GetFunction(
                        this.ldef.funcLike, new VariableDef(this.ldef.StringType, "Кличка"), pattern)
            };
            var actual = LinqToLcs.GetLcs(queryExpression, Utils.GetDefaultView(typeof(Кошка)));

            Assert.True(Equals(expected, actual));
        }
        public void GetLcsTestTicksException()
        {
            var exception = Xunit.Record.Exception(() =>
            {
                var testProvider = new TestLcsQueryProvider <Перелом>();
                DateTime moment  = DateTime.Now.AddDays(-7);
                var predicate    = (Expression <Func <Перелом, bool> >)(o => o.Дата.Ticks == 34);
                new Query <Перелом>(testProvider).Where(predicate).ToArray();
                Expression queryExpression = testProvider.InnerExpression;

                LoadingCustomizationStruct actual = LinqToLcs.GetLcs(
                    queryExpression, Utils.GetDefaultView(typeof(Перелом)));
            });

            Assert.IsType(typeof(MethodSignatureException), exception);
        }
        public void GetLcsTestStringEqualsReverse()
        {
            const string       Pattern         = "Кошка";
            IQueryable <Кошка> queryList       = new List <Кошка>().AsQueryable();
            IQueryable <Кошка> query           = from pn in queryList where Pattern.Equals(pn.Кличка) select pn;
            Expression         queryExpression = query.Expression;
            var expected = new LoadingCustomizationStruct(null)
            {
                LimitFunction =
                    this.ldef.GetFunction(
                        this.ldef.funcEQ, Pattern, new VariableDef(this.ldef.StringType, "Кличка"))
            };
            LoadingCustomizationStruct actual = LinqToLcs.GetLcs(queryExpression, Utils.GetDefaultView(typeof(Кошка)));

            Assert.True(Equals(expected, actual));
        }
        /// <summary>
        /// Общий метод сравнения предполагаемой lcs и результата конвертации linq-выражения.
        /// </summary>
        /// <param name="predicate">Условие linq-выражения.</param>
        /// <param name="limitFunction">Предполагаемая lcs.</param>
        private bool CheckChar(Expression <Func <Лапа, bool> > predicate, Function limitFunction)
        {
            var testProvider = new TestLcsQueryProvider <Лапа>();

            new Query <Лапа>(testProvider).Where(predicate).ToList();
            Expression queryExpression = testProvider.InnerExpression;

            var expected = new LoadingCustomizationStruct(null)
            {
                LimitFunction = limitFunction
            };

            LoadingCustomizationStruct actual = LinqToLcs.GetLcs(queryExpression, Utils.GetDefaultView(typeof(Лапа)));

            return(Equals(expected, actual));
        }
        public void GetLcsTestSubstringRevert()
        {
            const string       ldefPattern     = "__р%";
            IQueryable <Кошка> queryList       = new List <Кошка>().AsQueryable();
            IQueryable <Кошка> query           = from pn in queryList where "р" == pn.Кличка.Substring(2, 2) select pn;
            Expression         queryExpression = query.Expression;
            var expected = new LoadingCustomizationStruct(null)
            {
                LimitFunction =
                    ldef.GetFunction(
                        this.ldef.funcLike, new VariableDef(this.ldef.StringType, "Кличка"), ldefPattern)
            };
            LoadingCustomizationStruct actual = LinqToLcs.GetLcs(queryExpression, Utils.GetDefaultView(typeof(Кошка)));

            Assert.True(Equals(expected, actual));
        }