From ad83e0c26aa3c09937c6585bbebbd8c31a41fbcb Mon Sep 17 00:00:00 2001 From: 2881099 <2881099@qq.com> Date: Tue, 28 Mar 2023 20:07:04 +0800 Subject: [PATCH] =?UTF-8?q?-=20=E4=BC=98=E5=8C=96=20.Select().With?= =?UTF-8?q?Sql().ToList()=20=E4=BD=93=E9=AA=8C=EF=BC=9B#466?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Examples/base_entity/Program.cs | 301 +++++++++--------- .../SelectProvider/Select0ProviderReader.cs | 23 ++ 2 files changed, 181 insertions(+), 143 deletions(-) diff --git a/Examples/base_entity/Program.cs b/Examples/base_entity/Program.cs index 31c96e9e..422601a8 100644 --- a/Examples/base_entity/Program.cs +++ b/Examples/base_entity/Program.cs @@ -576,6 +576,163 @@ namespace base_entity BaseEntity.Initialization(fsql, () => _asyncUow.Value); #endregion + var objtsql1 = fsql.Select().WithSql("select * from user1").ToList(); + + var astsql = fsql.Select() + .InnerJoin((a, b) => a.id == b.Id) + .OrderBy((a,b) => a.createtime) + .ToSql(); + + var testitems = new[] + { + new AsTableLog{ msg = "msg01", createtime = DateTime.Parse("2022-1-1 13:00:11"), click = 1 }, + new AsTableLog{ msg = "msg02", createtime = DateTime.Parse("2022-1-2 14:00:12"), click = 2 }, + new AsTableLog{ msg = "msg03", createtime = DateTime.Parse("2022-2-2 15:00:13"), click = 3 }, + new AsTableLog{ msg = "msg04", createtime = DateTime.Parse("2022-2-8 15:00:13"), click = 4 }, + new AsTableLog{ msg = "msg05", createtime = DateTime.Parse("2022-3-8 15:00:13"), click = 5 }, + new AsTableLog{ msg = "msg06", createtime = DateTime.Parse("2022-4-8 15:00:13"), click = 6 }, + new AsTableLog{ msg = "msg07", createtime = DateTime.Parse("2022-6-8 15:00:13"), click = 7 }, + new AsTableLog{ msg = "msg08", createtime = DateTime.Parse("2022-7-1"), click = 8}, + new AsTableLog{ msg = "msg09", createtime = DateTime.Parse("2022-7-1 11:00:00"), click = 8} + + }; + var sqlatb = fsql.Insert(testitems).NoneParameter(); + var sqlat = sqlatb.ToSql(); + var sqlatr = sqlatb.ExecuteAffrows(); + + var sqlatc1 = fsql.Delete().Where(a => a.id == Guid.NewGuid() && a.createtime == DateTime.Parse("2022-3-8 15:00:13")); + var sqlatca1 = sqlatc1.ToSql(); + var sqlatcr1 = sqlatc1.ExecuteAffrows(); + + var sqlatc2 = fsql.Delete().Where(a => a.id == Guid.NewGuid() && a.createtime == DateTime.Parse("2021-3-8 15:00:13")); + var sqlatca2 = sqlatc2.ToSql(); + var sqlatcr2 = sqlatc2.ExecuteAffrows(); + + var sqlatc = fsql.Delete().Where(a => a.id == Guid.NewGuid() && a.createtime.Between(DateTime.Parse("2022-3-1"), DateTime.Parse("2022-5-1"))); + var sqlatca = sqlatc.ToSql(); + var sqlatcr = sqlatc.ExecuteAffrows(); + + var sqlatd1 = fsql.Update().SetSource(testitems[0]); + var sqlatd101 = sqlatd1.ToSql(); + var sqlatd102 = sqlatd1.ExecuteAffrows(); + + var sqlatd2 = fsql.Update().SetSource(testitems[5]); + var sqlatd201 = sqlatd2.ToSql(); + var sqlatd202 = sqlatd2.ExecuteAffrows(); + + var sqlatd3 = fsql.Update().SetSource(testitems); + var sqlatd301 = sqlatd3.ToSql(); + var sqlatd302 = sqlatd3.ExecuteAffrows(); + + var sqlatd4 = fsql.Update(Guid.NewGuid()).Set(a => a.msg == "newmsg"); + var sqlatd401 = sqlatd4.ToSql(); + var sqlatd402 = sqlatd4.ExecuteAffrows(); + + var sqlatd5 = fsql.Update(Guid.NewGuid()).Set(a => a.msg == "newmsg").Where(a => a.createtime.Between(DateTime.Parse("2022-3-1"), DateTime.Parse("2022-5-1"))); + var sqlatd501 = sqlatd5.ToSql(); + var sqlatd502 = sqlatd5.ExecuteAffrows(); + + var sqlatd6 = fsql.Update(Guid.NewGuid()).Set(a => a.msg == "newmsg").Where(a => a.createtime > DateTime.Parse("2022-3-1") && a.createtime < DateTime.Parse("2022-5-1")); + var sqlatd601 = sqlatd6.ToSql(); + var sqlatd602 = sqlatd6.ExecuteAffrows(); + + var sqlatd7 = fsql.Update(Guid.NewGuid()).Set(a => a.msg == "newmsg").Where(a => a.createtime > DateTime.Parse("2022-3-1")); + var sqlatd701 = sqlatd7.ToSql(); + var sqlatd702 = sqlatd7.ExecuteAffrows(); + + var sqlatd8 = fsql.Update(Guid.NewGuid()).Set(a => a.msg == "newmsg").Where(a => a.createtime < DateTime.Parse("2022-5-1")); + var sqlatd801 = sqlatd8.ToSql(); + var sqlatd802 = sqlatd8.ExecuteAffrows(); + + var sqlatd12 = fsql.InsertOrUpdate().SetSource(testitems[0]); + var sqlatd1201 = sqlatd12.ToSql(); + var sqlatd1202 = sqlatd12.ExecuteAffrows(); + + var sqlatd22 = fsql.InsertOrUpdate().SetSource(testitems[5]); + var sqlatd2201 = sqlatd22.ToSql(); + var sqlatd2202 = sqlatd22.ExecuteAffrows(); + + var sqlatd32 = fsql.InsertOrUpdate().SetSource(testitems); + var sqlatd3201 = sqlatd32.ToSql(); + var sqlatd3202 = sqlatd32.ExecuteAffrows(); + + var sqls1 = fsql.Select().OrderBy(a => a.createtime); + var sqls101 = sqls1.ToSql(); + var sqls102 = sqls1.ToList(); + + var sqls2 = fsql.Select().Where(a => a.createtime.Between(DateTime.Parse("2022-3-1"), DateTime.Parse("2022-5-1"))); + var sqls201 = sqls2.ToSql(); + var sqls202 = sqls2.ToList(); + + var sqls3 = fsql.Select().Where(a => a.createtime > DateTime.Parse("2022-3-1") && a.createtime < DateTime.Parse("2022-5-1")); + var sqls301 = sqls3.ToSql(); + var sqls302 = sqls3.ToList(); + + var sqls4 = fsql.Select().Where(a => a.createtime > DateTime.Parse("2022-3-1")); + var sqls401 = sqls4.ToSql(); + var sqls402 = sqls4.ToList(); + + var sqls5 = fsql.Select().Where(a => a.createtime < DateTime.Parse("2022-5-1")); + var sqls501 = sqls5.ToSql(); + var sqls502 = sqls5.ToList(); + + var sqls6 = fsql.Select().Where(a => a.createtime < DateTime.Parse("2022-5-1")).Limit(10).OrderBy(a => a.createtime); + var sqls601 = sqls6.ToSql(); + var sqls602 = sqls6.ToList(); + + var sqls7 = fsql.Select().Where(a => a.createtime < DateTime.Parse("2022-5-1")).ToAggregate(g => new + { + sum1 = g.Sum(g.Key.click), + cou1 = g.Count(), + avg1 = g.Avg(g.Key.click), + min = g.Min(g.Key.click), + max = g.Max(g.Key.click) + }); + + + var usergroupRepository = fsql.GetAggregateRootRepository(); + usergroupRepository.Delete(a => true); + usergroupRepository.Insert(new[]{ + new UserGroup + { + CreateTime = DateTime.Now, + GroupName = "group1", + UpdateTime = DateTime.Now, + Sort = 1, + User1s = new List + { + new User1 { Nickname = "nickname11", Username = "username11", Description = "desc11" }, + new User1 { Nickname = "nickname12", Username = "username12", Description = "desc12" }, + new User1 { Nickname = "nickname13", Username = "username13", Description = "desc13" }, + } + }, + new UserGroup + { + CreateTime = DateTime.Now, + GroupName = "group2", + UpdateTime = DateTime.Now, + Sort = 2, + User1s = new List + { + new User1 { Nickname = "nickname21", Username = "username21", Description = "desc21" }, + new User1 { Nickname = "nickname22", Username = "username22", Description = "desc22" }, + new User1 { Nickname = "nickname23", Username = "username23", Description = "desc23" }, + } + }, + }); + var ugroupFirst = usergroupRepository.Select.First(); + ugroupFirst.Sort++; + usergroupRepository.Update(ugroupFirst); + var userRepository = fsql.GetAggregateRootRepository(); + + var testsublist1 = fsql.Select() + .First(a => new + { + a.Id, + list = userRepository.Select.Where(b => b.GroupId == a.Id).ToList(), + list2 = userRepository.Select.Where(b => b.GroupId == a.Id).ToList(b => b.Nickname), + }); + //fsql.CodeFirst.GetTableByEntity(typeof(User1)).Columns.Values.ToList().ForEach(col => //{ // col.Comment = ""; @@ -887,46 +1044,6 @@ namespace base_entity Math.PI }); - var usergroupRepository = fsql.GetAggregateRootRepository(); - usergroupRepository.Delete(a => true); - usergroupRepository.Insert(new[]{ - new UserGroup - { - CreateTime = DateTime.Now, - GroupName = "group1", - UpdateTime = DateTime.Now, - Sort = 1, - User1s = new List - { - new User1 { Nickname = "nickname11", Username = "username11", Description = "desc11" }, - new User1 { Nickname = "nickname12", Username = "username12", Description = "desc12" }, - new User1 { Nickname = "nickname13", Username = "username13", Description = "desc13" }, - } - }, - new UserGroup - { - CreateTime = DateTime.Now, - GroupName = "group2", - UpdateTime = DateTime.Now, - Sort = 2, - User1s = new List - { - new User1 { Nickname = "nickname21", Username = "username21", Description = "desc21" }, - new User1 { Nickname = "nickname22", Username = "username22", Description = "desc22" }, - new User1 { Nickname = "nickname23", Username = "username23", Description = "desc23" }, - } - }, - }); - var userRepository = fsql.GetAggregateRootRepository(); - - var testsublist1 = fsql.Select() - .First(a => new - { - a.Id, - list = userRepository.Select.Where(b => b.GroupId == a.Id).ToList(), - list2 = userRepository.Select.Where(b => b.GroupId == a.Id).ToList(b => b.Nickname), - }); - var testsublist2 = fsql.Select() .GroupBy(a => new { a.Id }) .WithTempQuery(a => a.Key) @@ -1513,109 +1630,7 @@ namespace base_entity // .ToSql(); #endregion - var testitems = new[] - { - new AsTableLog{ msg = "msg01", createtime = DateTime.Parse("2022-1-1 13:00:11"), click = 1 }, - new AsTableLog{ msg = "msg02", createtime = DateTime.Parse("2022-1-2 14:00:12"), click = 2 }, - new AsTableLog{ msg = "msg03", createtime = DateTime.Parse("2022-2-2 15:00:13"), click = 3 }, - new AsTableLog{ msg = "msg04", createtime = DateTime.Parse("2022-2-8 15:00:13"), click = 4 }, - new AsTableLog{ msg = "msg05", createtime = DateTime.Parse("2022-3-8 15:00:13"), click = 5 }, - new AsTableLog{ msg = "msg06", createtime = DateTime.Parse("2022-4-8 15:00:13"), click = 6 }, - new AsTableLog{ msg = "msg07", createtime = DateTime.Parse("2022-6-8 15:00:13"), click = 7 }, - new AsTableLog{ msg = "msg07", createtime = DateTime.Parse("2022-7-1"), click = 8} - }; - var sqlatb = fsql.Insert(testitems).NoneParameter(); - var sqlat = sqlatb.ToSql(); - var sqlatr = sqlatb.ExecuteAffrows(); - - var sqlatc1 = fsql.Delete().Where(a => a.id == Guid.NewGuid() && a.createtime == DateTime.Parse("2022-3-8 15:00:13")); - var sqlatca1 = sqlatc1.ToSql(); - var sqlatcr1 = sqlatc1.ExecuteAffrows(); - - var sqlatc2 = fsql.Delete().Where(a => a.id == Guid.NewGuid() && a.createtime == DateTime.Parse("2021-3-8 15:00:13")); - var sqlatca2 = sqlatc2.ToSql(); - var sqlatcr2 = sqlatc2.ExecuteAffrows(); - - var sqlatc = fsql.Delete().Where(a => a.id == Guid.NewGuid() && a.createtime.Between(DateTime.Parse("2022-3-1"), DateTime.Parse("2022-5-1"))); - var sqlatca = sqlatc.ToSql(); - var sqlatcr = sqlatc.ExecuteAffrows(); - - var sqlatd1 = fsql.Update().SetSource(testitems[0]); - var sqlatd101 = sqlatd1.ToSql(); - var sqlatd102 = sqlatd1.ExecuteAffrows(); - - var sqlatd2 = fsql.Update().SetSource(testitems[5]); - var sqlatd201 = sqlatd2.ToSql(); - var sqlatd202 = sqlatd2.ExecuteAffrows(); - - var sqlatd3 = fsql.Update().SetSource(testitems); - var sqlatd301 = sqlatd3.ToSql(); - var sqlatd302 = sqlatd3.ExecuteAffrows(); - - var sqlatd4 = fsql.Update(Guid.NewGuid()).Set(a => a.msg == "newmsg"); - var sqlatd401 = sqlatd4.ToSql(); - var sqlatd402 = sqlatd4.ExecuteAffrows(); - - var sqlatd5 = fsql.Update(Guid.NewGuid()).Set(a => a.msg == "newmsg").Where(a => a.createtime.Between(DateTime.Parse("2022-3-1"), DateTime.Parse("2022-5-1"))); - var sqlatd501 = sqlatd5.ToSql(); - var sqlatd502 = sqlatd5.ExecuteAffrows(); - - var sqlatd6 = fsql.Update(Guid.NewGuid()).Set(a => a.msg == "newmsg").Where(a => a.createtime > DateTime.Parse("2022-3-1") && a.createtime < DateTime.Parse("2022-5-1")); - var sqlatd601 = sqlatd6.ToSql(); - var sqlatd602 = sqlatd6.ExecuteAffrows(); - - var sqlatd7 = fsql.Update(Guid.NewGuid()).Set(a => a.msg == "newmsg").Where(a => a.createtime > DateTime.Parse("2022-3-1")); - var sqlatd701 = sqlatd7.ToSql(); - var sqlatd702 = sqlatd7.ExecuteAffrows(); - - var sqlatd8 = fsql.Update(Guid.NewGuid()).Set(a => a.msg == "newmsg").Where(a => a.createtime < DateTime.Parse("2022-5-1")); - var sqlatd801 = sqlatd8.ToSql(); - var sqlatd802 = sqlatd8.ExecuteAffrows(); - - var sqlatd12 = fsql.InsertOrUpdate().SetSource(testitems[0]); - var sqlatd1201 = sqlatd12.ToSql(); - var sqlatd1202 = sqlatd12.ExecuteAffrows(); - - var sqlatd22 = fsql.InsertOrUpdate().SetSource(testitems[5]); - var sqlatd2201 = sqlatd22.ToSql(); - var sqlatd2202 = sqlatd22.ExecuteAffrows(); - - var sqlatd32 = fsql.InsertOrUpdate().SetSource(testitems); - var sqlatd3201 = sqlatd32.ToSql(); - var sqlatd3202 = sqlatd32.ExecuteAffrows(); - - var sqls1 = fsql.Select().OrderBy(a => a.createtime); - var sqls101 = sqls1.ToSql(); - var sqls102 = sqls1.ToList(); - - var sqls2 = fsql.Select().Where(a => a.createtime.Between(DateTime.Parse("2022-3-1"), DateTime.Parse("2022-5-1"))); - var sqls201 = sqls2.ToSql(); - var sqls202 = sqls2.ToList(); - - var sqls3 = fsql.Select().Where(a => a.createtime > DateTime.Parse("2022-3-1") && a.createtime < DateTime.Parse("2022-5-1")); - var sqls301 = sqls3.ToSql(); - var sqls302 = sqls3.ToList(); - - var sqls4 = fsql.Select().Where(a => a.createtime > DateTime.Parse("2022-3-1")); - var sqls401 = sqls4.ToSql(); - var sqls402 = sqls4.ToList(); - - var sqls5 = fsql.Select().Where(a => a.createtime < DateTime.Parse("2022-5-1")); - var sqls501 = sqls5.ToSql(); - var sqls502 = sqls5.ToList(); - - var sqls6 = fsql.Select().Where(a => a.createtime < DateTime.Parse("2022-5-1")).Limit(10).OrderBy(a => a.createtime); - var sqls601 = sqls6.ToSql(); - var sqls602 = sqls6.ToList(); - - var sqls7 = fsql.Select().Where(a => a.createtime < DateTime.Parse("2022-5-1")).ToAggregate(g => new - { - sum1 = g.Sum(g.Key.click), - cou1 = g.Count(), - avg1 = g.Avg(g.Key.click), - min = g.Min(g.Key.click), - max = g.Max(g.Key.click) - }); + fsql.Aop.AuditValue += new EventHandler((_, e) => { diff --git a/FreeSql/Internal/CommonProvider/SelectProvider/Select0ProviderReader.cs b/FreeSql/Internal/CommonProvider/SelectProvider/Select0ProviderReader.cs index 9ac8cfda..87f8e031 100644 --- a/FreeSql/Internal/CommonProvider/SelectProvider/Select0ProviderReader.cs +++ b/FreeSql/Internal/CommonProvider/SelectProvider/Select0ProviderReader.cs @@ -585,6 +585,29 @@ namespace FreeSql.Internal.CommonProvider var type = tb1.TypeLazy ?? tb1.Type; var props = tb1.Properties; + if (type == typeof(object) && typeof(T1) == typeof(object)) + { + return new GetAllFieldExpressionTreeInfo + { + Field = "*", + Read = (orm, dr) => + { + //dynamic expando = new DynamicDictionary(); //动态类型字段 可读可写 + var expandodic = new Dictionary();// (IDictionary)expando; + var fc = dr.FieldCount; + for (var a = 0; a < fc; a++) + { + var name = dr.GetName(a); + //expando[name] = row2.GetValue(a); + if (expandodic.ContainsKey(name)) continue; + expandodic.Add(name, Utils.InternalDataReaderGetValue(_commonUtils, dr, a)); + } + //expando = expandodic; + return (T1)((object)expandodic); + } + }; + } + var ormExp = Expression.Parameter(typeof(IFreeSql), "orm"); var rowExp = Expression.Parameter(typeof(DbDataReader), "row"); var returnTarget = Expression.Label(type);