Exemple #1
0
        public override async Task <IReadOnlyList <FilmWithActorsCategories> > Execute()
        {
            var builder = new WhereClauseBuilder(FilmsSql.SelectFilmsWitActorsAndCategories);

            if (!string.IsNullOrEmpty(FilmTitle))
            {
                builder.AddClause("f.title = @FilmTitle", new { FilmTitle });
            }

            if (!string.IsNullOrEmpty(SearchFullText))
            {
                builder.AddClause("f.fulltext @@ to_tsquery(@SearchFullText)", new { SearchFullText });
            }

            var dic1 = new Dictionary <int, FilmWithActorsCategories>();
            var dic2 = new Dictionary <int, Actor>();
            var dic3 = new Dictionary <int, Category>();

            var result  = builder.Build();
            var records =
                await Connection.QueryAsync <Film, Actor, Category, FilmWithActorsCategories>(
                    sql : result.BuiltQuery,
                    param : result.BuiltParams,
                    map : (f, a, c) => Map(f, a, c, dic1, dic2, dic3),
                    transaction : Transaction,
                    splitOn : "actor_id, category_id");

            return(records.Distinct().ToList().AsReadOnly());
        }
Exemple #2
0
        public void Test_LambdaBuilderWhereClause_CombineCondition_QueryValueWithPropertyWithCallMethod()
        {
            Database db = new Database(EApp.Data.DbProviderFactory.Default);

            WhereClauseBuilder <Post> builder = db.DBProvider.CreateWhereClauseBuilder <Post>();

            PostQueryRequest request = new PostQueryRequest();

            request.TopicId            = 1000;
            request.MiscParams.TopicId = 2000;
            request.Content            = "足球";
            request.MiscParams.Content = "篮球";
            request.CreationDateTimeParam.CreationDateTime = DateTimeUtils.ToDateTime("2015-1-22").Value;

            WhereClauseBuildResult result = builder.BuildWhereClause(p => (p.TopicId <request.TopicId || p.TopicId> request.MiscParams.TopicId) &&
                                                                     (p.Content.Contains(request.Content) || p.Content.Contains(request.MiscParams.Content)) ||
                                                                     (p.CreationDateTime < request.CreationDateTimeParam.CreationDateTime ||
                                                                      p.CreationDateTime.Equals(request.CreationDateTimeParam.CreationDateTime)));

            string orderBy = builder.BuildOrderByClause(p => p.CreationDateTime);

            Assert.AreEqual(true, !string.IsNullOrEmpty(result.WhereClause));

            Assert.AreEqual(1000, result.ParameterValues.Values.ToList()[0]);

            Assert.AreEqual(2000, result.ParameterValues.Values.ToList()[1]);

            Assert.AreEqual("%足球%", result.ParameterValues.Values.ToList()[2]);

            Assert.AreEqual("%篮球%", result.ParameterValues.Values.ToList()[3]);

            Assert.AreEqual(request.CreationDateTimeParam.CreationDateTime, result.ParameterValues.Values.ToList()[4]);

            Assert.AreEqual(request.CreationDateTimeParam.CreationDateTime, result.ParameterValues.Values.ToList()[5]);
        }
Exemple #3
0
        public void Test_LambdaBuilderWhereClause_CombineCondition_QueryValueWithFieldWithCallMethod()
        {
            Database db = new Database(EApp.Data.DbProviderFactory.Default);

            WhereClauseBuilder <Post> builder = db.DBProvider.CreateWhereClauseBuilder <Post>();

            int      topicId  = 1000;
            int      topicId1 = 2000;
            string   content  = "足球";
            string   content1 = "篮球";
            DateTime datetime = DateTimeUtils.ToDateTime("2015-1-22").Value;

            WhereClauseBuildResult result = builder.BuildWhereClause(p => (p.TopicId <topicId || p.TopicId> topicId1) &&
                                                                     (p.Content.Contains(content) || p.Content.Contains(content1)) ||
                                                                     p.CreationDateTime < datetime);

            string orderBy = builder.BuildOrderByClause(p => p.CreationDateTime);

            Assert.AreEqual(true, !string.IsNullOrEmpty(result.WhereClause));

            Assert.AreEqual(1000, result.ParameterValues.Values.ToList()[0]);

            Assert.AreEqual(2000, result.ParameterValues.Values.ToList()[1]);

            Assert.AreEqual("%足球%", result.ParameterValues.Values.ToList()[2]);

            Assert.AreEqual("%篮球%", result.ParameterValues.Values.ToList()[3]);

            Assert.AreEqual(datetime, result.ParameterValues.Values.ToList()[4]);
        }
Exemple #4
0
        public void Test_LambdaBuilderWhereClause_QueryValueWithPropertyWithCallMethod()
        {
            Database db = new Database(EApp.Data.DbProviderFactory.Default);

            WhereClauseBuilder <Post> builder = db.DBProvider.CreateWhereClauseBuilder <Post>();

            PostQueryRequest request = new PostQueryRequest();

            request.TopicId = 1000;
            request.Content = "足球";
            request.CreationDateTimeParam.CreationDateTime = DateTimeUtils.ToDateTime("2015-1-22").Value;

            List <int> topicIds = new List <int>();

            topicIds.Add(1000);
            topicIds.Add(2000);
            topicIds.Add(3000);

            WhereClauseBuildResult result = builder.BuildWhereClause(p => p.TopicId.Equals(request.TopicId) &&
                                                                     p.Content.Contains(request.Content) &&
                                                                     p.CreationDateTime < request.CreationDateTimeParam.CreationDateTime);

            string orderBy = builder.BuildOrderByClause(p => p.CreationDateTime);

            Assert.AreEqual(true, !string.IsNullOrEmpty(result.WhereClause));

            Assert.AreEqual(1000, result.ParameterValues.Values.ToList()[0]);

            Assert.AreEqual("%足球%", result.ParameterValues.Values.ToList()[1]);

            Assert.AreEqual(request.CreationDateTimeParam.CreationDateTime, result.ParameterValues.Values.ToList()[2]);
        }
 public void Setup()
 {
     _mock = new Mock <IDbCommand>();
     _sut  = new WhereClauseBuilder(
         _mock.Object,
         LogicalOperator.AND,
         false);
 }
Exemple #6
0
        protected override void AddParametersFor(SpecialOwnerQuery input, WhereClauseBuilder builder) =>
        builder.ForParameter(input.Id, ID_COLUMN, SqlDbType.BigInt)
        .ForParameter(input.CreationDate, CREATION_DATE_COLUMN, SqlDbType.DateTime2)
        .ForParameter(input.CreatedBy, CREATED_BY_COLUMN, SqlDbType.VarChar)
        .ForParameter(input.ModificationDate, MODIFICATION_DATE_COLUMN, SqlDbType.DateTime2)
        .ForParameter(input.ModifiedBy, MODIFIED_BY_COLUMN, SqlDbType.VarChar)

        .ForParameter(input.Name, NAME_COLUMN, SqlDbType.VarChar)
        .ForParameter(input.Remark, REMARK_COLUMN, SqlDbType.VarChar);
        protected override void AddParametersFor(ProductQuery input, WhereClauseBuilder builder) =>
        builder.ForParameter(input.Id, ID_COLUMN, SqlDbType.BigInt)
        .ForParameter(input.CreationDate, CREATION_DATE_COLUMN, SqlDbType.DateTime2)
        .ForParameter(input.CreatedBy, CREATED_BY_COLUMN, SqlDbType.VarChar)
        .ForParameter(input.ModificationDate, MODIFICATION_DATE_COLUMN, SqlDbType.DateTime2)
        .ForParameter(input.ModifiedBy, MODIFIED_BY_COLUMN, SqlDbType.VarChar)

        .ForParameter(input.Brand, BRAND_COLUMN, SqlDbType.VarChar)
        .ForParameter(input.Type, TYPE_COLUMN, SqlDbType.VarChar);
Exemple #8
0
        /// <summary>
        /// 获取给定对象类型的where子句建造器。
        /// </summary>
        /// <typeparam name="T">给定的对象类型。</typeparam>
        /// <returns>where子句建造器实例。</returns>
        protected WhereClauseBuilder <T> GetWhereClauseBuilder <T>() where T : class, new()
        {
            WhereClauseBuilder <T> whereClauseBuilder = null;

            if (!_whereClauseBuilders.ContainsKey(typeof(T)))
            {
                whereClauseBuilder = CreateWhereClauseBuilder <T>();
                _whereClauseBuilders.Add(typeof(T), whereClauseBuilder);
            }
            else
            {
                whereClauseBuilder = _whereClauseBuilders[typeof(T)] as WhereClauseBuilder <T>;
            }
            return(whereClauseBuilder);
        }
Exemple #9
0
        public void Test_LambdaBuilderWhereClause_QueryValueWithoutFieldAndPropertyNoCallMethod()
        {
            Database db = new Database(EApp.Data.DbProviderFactory.Default);

            WhereClauseBuilder <Post> builder = db.DBProvider.CreateWhereClauseBuilder <Post>();

            WhereClauseBuildResult result = builder.BuildWhereClause(p => p.TopicId == 1000 && p.Content == "足球");

            string orderBy = builder.BuildOrderByClause(p => p.CreationDateTime);

            Assert.AreEqual(true, !string.IsNullOrEmpty(result.WhereClause));

            Assert.AreEqual(1000, result.ParameterValues.Values.ToList()[0]);

            Assert.AreEqual("足球", result.ParameterValues.Values.ToList()[1]);
        }
Exemple #10
0
        public void Test_LambdaBuilderWhereClause_CombineCondition_QueryValueWithoutFieldAndPropertyWithCallMethod()
        {
            Database db = new Database(EApp.Data.DbProviderFactory.Default);

            WhereClauseBuilder <Post> builder = db.DBProvider.CreateWhereClauseBuilder <Post>();

            WhereClauseBuildResult result = builder.BuildWhereClause(p => (p.TopicId < 1000 || p.TopicId > 2000) &&
                                                                     (p.Content.Contains("足球") || p.Content.Contains("篮球")));

            string orderBy = builder.BuildOrderByClause(p => p.CreationDateTime);

            Assert.AreEqual(true, !string.IsNullOrEmpty(result.WhereClause));

            Assert.AreEqual(1000, result.ParameterValues.Values.ToList()[0]);

            Assert.AreEqual(2000, result.ParameterValues.Values.ToList()[1]);

            Assert.AreEqual("%足球%", result.ParameterValues.Values.ToList()[2]);

            Assert.AreEqual("%篮球%", result.ParameterValues.Values.ToList()[3]);
        }
Exemple #11
0
        public void Test_LambdaBuilderWhereClause_QueryValueWithoutFieldAndPropertyWithCallMethod()
        {
            Database db = new Database(EApp.Data.DbProviderFactory.Default);

            WhereClauseBuilder <Post> builder = db.DBProvider.CreateWhereClauseBuilder <Post>();

            DateTime datetime = DateTimeUtils.ToDateTime("2015-1-22").Value;

            WhereClauseBuildResult result = builder.BuildWhereClause(p => p.TopicId.Equals(1000) &&
                                                                     p.Content.Contains("足球") &&
                                                                     p.CreationDateTime < datetime);

            string orderBy = builder.BuildOrderByClause(p => p.CreationDateTime);

            Assert.AreEqual(true, !string.IsNullOrEmpty(result.WhereClause));

            Assert.AreEqual(1000, result.ParameterValues.Values.ToList()[0]);

            Assert.AreEqual("%足球%", result.ParameterValues.Values.ToList()[1]);

            Assert.AreEqual(datetime, result.ParameterValues.Values.ToList()[2]);
        }
        public override async Task <IReadOnlyList <FilmWithLanguage> > Execute()
        {
            var query   = "select f.*, l.* from film f inner join language l on l.language_id = f.language_id";
            var builder = new WhereClauseBuilder(query);

            if (!string.IsNullOrEmpty(FilmTitle))
            {
                builder.AddClause("f.title = @FilmTitle", new { FilmTitle });
            }

            var result  = builder.Build();
            var records =
                await Connection.QueryAsync <Film, Language, FilmWithLanguage>(
                    sql : result.BuiltQuery,
                    param : result.BuiltParams,
                    map : (f, l) => new FilmWithLanguage(f)
            {
                Lang = l
            },
                    transaction : Transaction,
                    splitOn : "language_id");

            return(records.Distinct().ToList().AsReadOnly());
        }
        public override async Task <IReadOnlyList <Actor> > Execute()
        {
            var builder = new WhereClauseBuilder("select * from actor", criteriaJoinStrategy);

            if (Id.HasValue)
            {
                builder.AddClause("actor_id = @Id", new { Id = Id.Value });
            }

            if (!string.IsNullOrEmpty(FirstName))
            {
                builder.AddClause("first_name = @FirstName", new { FirstName });
            }

            if (!string.IsNullOrEmpty(LastName))
            {
                builder.AddClause("last_name = @LastName", new { LastName });
            }

            var result  = builder.Build();
            var records = await Connection.QueryAsync <Actor>(result.BuiltQuery, result.BuiltParams, Transaction);

            return(records.ToList().AsReadOnly());
        }
Exemple #14
0
        public void Test_LambdaBuilderWhereClause_QueryValueWithFieldNoCallMethod()
        {
            Database db = new Database(Eagle.Data.DbProviderFactory.Default);

            WhereClauseBuilder <Post> builder = db.DBProvider.CreateWhereClauseBuilder <Post>();

            int      topicId  = 1000;
            string   content  = "足球";
            DateTime datetime = DateTimeUtils.ToDateTime("2015-1-22").Value;

            WhereClauseBuildResult result = builder.BuildWhereClause(p => p.TopicId == topicId &&
                                                                     p.Content == content &&
                                                                     p.CreationDateTime < datetime);

            string orderBy = builder.BuildOrderByClause(p => p.CreationDateTime);

            Assert.AreEqual(true, !string.IsNullOrEmpty(result.WhereClause));

            Assert.AreEqual(1000, result.ParameterValues.Values.ToList()[0]);

            Assert.AreEqual("足球", result.ParameterValues.Values.ToList()[1]);

            Assert.AreEqual(datetime, result.ParameterValues.Values.ToList()[2]);
        }
Exemple #15
0
 protected override void AddParametersFor(AssetHistoryQuery input, WhereClauseBuilder builder) =>
 builder.ForParameter(input.Id, ID_COLUMN, SqlDbType.BigInt)
 .ForParameter(input.AssetId, ASSET_ID_COLUMN, SqlDbType.BigInt)
 .ForParameter(input.Tag, AssetRepository.TAG_COLUMN, SqlDbType.VarChar);
Exemple #16
0
 protected abstract void AddParametersFor(TQuery input, WhereClauseBuilder builder);
 public void SetUp()
 {
     builder = new WhereClauseBuilder();
 }