コード例 #1
0
        public void GetLcsTestNullableIntWithNull2()
        {
            // Данный код просто показывает, что классическое linq возвращает, сравнивая int с null, при этом не падая.
            var someList = new List <int?>()
            {
                1, 2, 3, null
            };
            int?nullableInt = null;
            var result      = someList.Where(x => x > nullableInt).ToList();

            Assert.Equal(0, result.Count);

            // Далее наш linqprovider.
            var testProvider = new TestLcsQueryProvider <Лапа>();

            new Query <Лапа>(testProvider).Where(x => x.азмерNullableInt > nullableInt).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));
        }
コード例 #2
0
        public void GetLcsTestDetailAllWithLimit()
        {
            var testProvider = new TestLcsQueryProvider <Кошка>();

            // Только те кошки у которых переломаны все лапы
            new Query <Кошка>(testProvider).Where(o => o.Лапа.Cast <Лапа>().All(obj => obj.БылиЛиПереломы)).ToArray();
            Expression queryExpression = testProvider.InnerExpression;

            var dvd = new DetailVariableDef
            {
                ConnectMasterPorp = "Кошка",
                OwnerConnectProp  = new[] { SQLWhereLanguageDef.StormMainObjectKey },
                View = Information.GetView("ЛапаE", typeof(Лапа)),
                Type = this.ldef.GetObjectType("Details")
            };

            var lf       = ldef.GetFunction(ldef.funcEQ, new VariableDef(ldef.BoolType, "БылиЛиПереломы"));
            var expected = new LoadingCustomizationStruct(null)
            {
                LimitFunction = this.ldef.GetFunction("ExistExact", dvd, lf)
            };

            LoadingCustomizationStruct actual = LinqToLcs.GetLcs(queryExpression, Utils.GetDefaultView(typeof(Кошка)));

            Assert.True(Equals(expected, actual));
        }
コード例 #3
0
        public void GetLcsTestDateField()
        {
            DateTime now          = DateTime.Now;
            var      testProvider = new TestLcsQueryProvider <DateField>();
            var      predicate    = (Expression <Func <DateField, bool> >)(o => o.Date.Date < now.Date);

            new Query <DateField>(testProvider).Where(predicate).ToArray();

            Expression queryExpression = testProvider.InnerExpression;

            var expectedLf = ldef.GetFunction(
                ldef.funcL,
                ldef.GetFunction(
                    ldef.funcOnlyDate,
                    new VariableDef(ldef.DateTimeType, "Date")),
                ldef.GetFunction(ldef.funcOnlyDate, now));

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

            LoadingCustomizationStruct actual = LinqToLcs.GetLcs(
                queryExpression, DateField.Views.DateFieldE);

            Assert.True(Equals(expected, actual));
        }
コード例 #4
0
        public void GetLcsTestDetailWithCustomOwnerConnectProp()
        {
            var testProvider = new TestLcsQueryProvider <Котенок>();

            new Query <Котенок>(testProvider).Where(
                x => x.Кошка.Лапа.Cast <Лапа>().Any(o => o.ТипЛапы.Название == "передняя")).ToList();
            Expression queryExpression = testProvider.InnerExpression;

            var dvd = new DetailVariableDef
            {
                ConnectMasterPorp = "Кошка",
                OwnerConnectProp  = new[] { "Кошка" },
                View = Information.GetView("ЛапаE", typeof(Лапа)),
                Type = this.ldef.GetObjectType("Details")
            };

            var lf = ldef.GetFunction(ldef.funcEQ, new VariableDef(ldef.StringType, "ТипЛапы.Название"), "передняя");

            var expected = new LoadingCustomizationStruct(null)
            {
                LimitFunction =
                    this.ldef.GetFunction("Exist", dvd, lf)
            };

            LoadingCustomizationStruct actual = LinqToLcs.GetLcs(
                queryExpression, Utils.GetDefaultView(typeof(Котенок)), new[] { Utils.GetDefaultView(typeof(Кошка)) });

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

            // В сравнении Function DetailVariableDef не учитывается, поэтому проверим руками
            var expectedDvd = (DetailVariableDef)expected.LimitFunction.Parameters[0];
            var actualDvd   = (DetailVariableDef)actual.LimitFunction.Parameters[0];

            Assert.True(Equals(expectedDvd.OwnerConnectProp[0], actualDvd.OwnerConnectProp[0]));
        }
コード例 #5
0
        public void GetLcsTestAny()
        {
            var testProvider = new TestLcsQueryProvider <Кошка>();

            // Все кошки с лапами
            new Query <Кошка>(testProvider).Where(o => o.Лапа.Cast <Лапа>().Any()).ToArray();
            Expression queryExpression = testProvider.InnerExpression;

            var dvd = new DetailVariableDef
            {
                ConnectMasterPorp = "Кошка",
                OwnerConnectProp  = new[] { SQLWhereLanguageDef.StormMainObjectKey },
                View = Information.GetView("ЛапаE", typeof(Лапа)),
                Type = this.ldef.GetObjectType("Details")
            };

            var expected = new LoadingCustomizationStruct(null)
            {
                LimitFunction = this.ldef.GetFunction("Exist", dvd, true)
            };

            LoadingCustomizationStruct actual = LinqToLcs.GetLcs(queryExpression, Utils.GetDefaultView(typeof(Кошка)));

            Assert.True(Equals(expected, actual));
        }
コード例 #6
0
        public void GetLcsTestDetailAnyConjunction()
        {
            var testProvider = new TestLcsQueryProvider <Кошка>();

            new Query <Кошка>(testProvider).Where(x => x.Лапа.Cast <Лапа>().Any(o => o.Номер == 1 && o.Кошка.Кличка.Contains("кличка"))).ToList();
            Expression queryExpression = testProvider.InnerExpression;

            var dvd = new DetailVariableDef
            {
                ConnectMasterPorp = "Кошка",
                OwnerConnectProp  = new[] { SQLWhereLanguageDef.StormMainObjectKey },
                View = Information.GetView("ЛапаE", typeof(Лапа)),
                Type = this.ldef.GetObjectType("Details")
            };

            var lf = ldef.GetFunction(
                ldef.funcAND,
                ldef.GetFunction(ldef.funcEQ, new VariableDef(ldef.NumericType, "Номер"), 1),
                ldef.GetFunction(ldef.funcLike, new VariableDef(ldef.StringType, "Кошка.Кличка"), "%кличка%"));
            var expected = new LoadingCustomizationStruct(null)
            {
                LimitFunction = this.ldef.GetFunction("Exist", dvd, lf)
            };

            LoadingCustomizationStruct actual = LinqToLcs.GetLcs(queryExpression, Utils.GetDefaultView(typeof(Кошка)));

            Assert.True(Equals(expected, actual));
        }
        public void GetLcsByPseudoDetailLimitTestSimpleAnyWithCmp()
        {
            var testProvider = new TestLcsQueryProvider <Порода>();

            // Все породы, для которых определены кошки
            new Query <Порода>(testProvider).Where <Порода, Кошка>(
                Information.GetView("КошкаE", typeof(Кошка)),
                Information.ExtractPropertyPath <Кошка>(x => x.Порода),
                x => x.Any(),
                "SomeCmp").ToList();

            Expression queryExpression = testProvider.InnerExpression;

            var dvd = new DetailVariableDef(
                this.ldef.GetObjectType("Details"),
                "SomeCmp",
                Information.GetView("КошкаE", typeof(Кошка)),
                "Порода",
                new[] { SQLWhereLanguageDef.StormMainObjectKey });

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

            LoadingCustomizationStruct actual = LinqToLcs.GetLcs(queryExpression, Utils.GetDefaultView(typeof(Порода)));

            Assert.True(Equals(expected, actual));
        }
        public void GetLcsByPseudoDetailLimitTestConditionAllWithCmp()
        {
            var testProvider = new TestLcsQueryProvider <Порода>();

            // Все породы, в которые входят только кошки, не носящие клички ни "Барсик", ни "Мурзик"
            new Query <Порода>(testProvider).Where <Порода, Кошка>(
                Information.GetView("КошкаE", typeof(Кошка)),
                Information.ExtractPropertyPath <Кошка>(x => x.Порода),
                y => y.All(x => x.Кличка != "Барсик" && x.Кличка != "Мурзик"),
                "SomeCmp").ToList();

            Expression queryExpression = testProvider.InnerExpression;

            var dvd = new DetailVariableDef(
                this.ldef.GetObjectType("Details"),
                "SomeCmp",
                Information.GetView("КошкаE", typeof(Кошка)),
                "Порода",
                new[] { SQLWhereLanguageDef.StormMainObjectKey });

            var lf = ldef.GetFunction(
                ldef.funcAND,
                ldef.GetFunction(ldef.funcNEQ, new VariableDef(ldef.StringType, "Кличка"), "Барсик"),
                ldef.GetFunction(ldef.funcNEQ, new VariableDef(ldef.StringType, "Кличка"), "Мурзик"));

            var expected = new LoadingCustomizationStruct(null)
            {
                LimitFunction = this.ldef.GetFunction(ldef.funcExistExact, dvd, lf)
            };

            LoadingCustomizationStruct actual = LinqToLcs.GetLcs(queryExpression, Utils.GetDefaultView(typeof(Порода)));

            Assert.True(Equals(expected, actual));
        }
コード例 #9
0
        public void GetLcsTestAddYear()
        {
            DateTime now          = DateTime.Now;
            var      testProvider = new TestLcsQueryProvider <Перелом>();
            var      predicate    = (Expression <Func <Перелом, bool> >)(o => o.Дата.AddYears(1) < now.Date);

            new Query <Перелом>(testProvider).Where(predicate).ToArray();

            Expression queryExpression = testProvider.InnerExpression;

            var expectedLf = ldef.GetFunction(
                ldef.funcL,
                ldef.GetFunction(
                    ldef.funcDateAdd,
                    ldef.GetFunction(ldef.paramYearDIFF),
                    1,
                    new VariableDef(ldef.DateTimeType, "Дата")),
                ldef.GetFunction(ldef.funcOnlyDate, now));

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

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

            Assert.True(Equals(expected, actual));
        }
        public void GetLcsByDetailLimitTestSpecialVariant()
        {
            var testProvider = new TestLcsQueryProvider <Кошка>();

            // Все кошки с лапами
            new Query <Кошка>(testProvider).Where <Кошка, Лапа>(
                Information.GetView("ЛапаE", typeof(Лапа)),
                x => x.Any()).ToArray();

            Expression queryExpression = testProvider.InnerExpression;

            var dvd = new DetailVariableDef(
                this.ldef.GetObjectType("Details"),
                "Лапа__Кошка",
                Information.GetView("ЛапаE", typeof(Лапа)),
                "Кошка",
                new[] { SQLWhereLanguageDef.StormMainObjectKey });

            var expected = new LoadingCustomizationStruct(null)
            {
                LimitFunction = this.ldef.GetFunction("Exist", dvd, ldef.GetFunction(ldef.paramTrue))
            };
            LoadingCustomizationStruct actual = LinqToLcs.GetLcs(queryExpression, Utils.GetDefaultView(typeof(Кошка)));

            Assert.True(Equals(expected, actual));
        }
コード例 #11
0
        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);
        }
コード例 #12
0
        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 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 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 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)));
        }
コード例 #16
0
        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);
        }
コード例 #17
0
        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)));
        }
コード例 #18
0
        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.Дата)));
        }
コード例 #19
0
        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));
        }
        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 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));
        }
コード例 #22
0
        /// <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));
        }
コード例 #23
0
        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);
        }
コード例 #24
0
        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.Порода.Название)));
        }
コード例 #25
0
        public void GetLcsTestDataObject()
        {
            var порода       = new Порода();
            var testProvider = new TestLcsQueryProvider <Кошка>();

            new Query <Кошка>(testProvider).Where(o => порода.Equals(o.Порода)).ToArray();
            Expression queryExpression = testProvider.InnerExpression;

            var expected = new LoadingCustomizationStruct(null)
            {
                LimitFunction = ldef.GetFunction(ldef.funcEQ, порода, new VariableDef(ldef.DataObjectType, "Порода"))
            };

            LoadingCustomizationStruct actual = LinqToLcs.GetLcs(queryExpression, Utils.GetDefaultView(typeof(Кошка)));

            Assert.True(Equals(expected, actual));
        }
コード例 #26
0
        public void TestUseKeyGuidProperty()
        {
            var testProvider = new TestLcsQueryProvider <Кошка>();

            new Query <Кошка>(testProvider)
            .Where(o =>
                   o.Ключ == "{72FCA622-A01E-494C-BE1C-0821178594FB}" &&
                   o.Порода.__PrimaryKey.ToString() == "{f6af2f25-1eca-4b62-8094-3284be51d73e}")
            .ToArray();
            Expression queryExpression = testProvider.InnerExpression;

            LoadingCustomizationStruct actual = LinqToLcs.GetLcs(queryExpression, Information.GetView("КошкаGuid", typeof(Кошка)));

            Assert.Equal(
                "AND ( = ( Ключ {72FCA622-A01E-494C-BE1C-0821178594FB} )  = ( Порода {f6af2f25-1eca-4b62-8094-3284be51d73e} ) )",
                actual.LimitFunction.ToString());
        }
コード例 #27
0
        public void GetLcsNullIsNullTest()
        {
            var testProvider = new TestLcsQueryProvider <Кошка>();

            new Query <Кошка>(testProvider).Where(o => null == null).ToArray();
            Expression queryExpression = testProvider.InnerExpression;

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

            LoadingCustomizationStruct actual = LinqToLcs.GetLcs(queryExpression, Utils.GetDefaultView(typeof(Кошка)));

            Assert.True(Equals(expected, actual));
        }
コード例 #28
0
        public void GetLcsMasterStringMemberTest()
        {
            var testProvider = new TestLcsQueryProvider <Кошка>();

            new Query <Кошка>(testProvider).Where(o => o.Порода.Название.Contains("ки")).ToArray();
            Expression queryExpression = testProvider.InnerExpression;

            var expected = new LoadingCustomizationStruct(null)
            {
                LimitFunction =
                    ldef.GetFunction(
                        ldef.funcLike, new VariableDef(ldef.StringType, "Порода.Название"), "%ки%")
            };
            LoadingCustomizationStruct actual = LinqToLcs.GetLcs(queryExpression, Utils.GetDefaultView(typeof(Кошка)));

            Assert.True(Equals(expected, actual));
        }
コード例 #29
0
        public void GetLcsMethodOfMemberOfSecondLevelTest()
        {
            var testProvider = new TestLcsQueryProvider <Кошка>();

            new Query <Кошка>(testProvider).Where(o => o.Порода.ТипПороды.Название.StartsWith("Блат")).ToArray();
            Expression queryExpression = testProvider.InnerExpression;

            var expected = new LoadingCustomizationStruct(null)
            {
                LimitFunction =
                    ldef.GetFunction(ldef.funcLike, new VariableDef(ldef.StringType, "Порода.ТипПороды.Название"), "Блат%")
            };

            LoadingCustomizationStruct actual = LinqToLcs.GetLcs(queryExpression, Utils.GetDefaultView(typeof(Кошка)));

            Assert.True(Equals(expected, actual));
        }
        /// <summary>
        /// Проверка соответствия linq сгенерированному lcs.
        /// </summary>
        /// <param name="predicate">Предикат в linq.</param>
        /// <param name="limitFunction">Функция ограничения в терминах lcs.</param>
        private void CompareLcsWithLimitCommon(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(Порода)));

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