Skip to content

Commit ad83e0c

Browse files
committed
- 优化 .Select<object>().WithSql().ToList() 体验;#466
1 parent c6e4a45 commit ad83e0c

File tree

2 files changed

+181
-143
lines changed

2 files changed

+181
-143
lines changed

Examples/base_entity/Program.cs

Lines changed: 158 additions & 143 deletions
Original file line numberDiff line numberDiff line change
@@ -576,6 +576,163 @@ static void Main(string[] args)
576576
BaseEntity.Initialization(fsql, () => _asyncUow.Value);
577577
#endregion
578578

579+
var objtsql1 = fsql.Select<object>().WithSql("select * from user1").ToList();
580+
581+
var astsql = fsql.Select<AsTableLog, Sys_owner>()
582+
.InnerJoin((a, b) => a.id == b.Id)
583+
.OrderBy((a,b) => a.createtime)
584+
.ToSql();
585+
586+
var testitems = new[]
587+
{
588+
new AsTableLog{ msg = "msg01", createtime = DateTime.Parse("2022-1-1 13:00:11"), click = 1 },
589+
new AsTableLog{ msg = "msg02", createtime = DateTime.Parse("2022-1-2 14:00:12"), click = 2 },
590+
new AsTableLog{ msg = "msg03", createtime = DateTime.Parse("2022-2-2 15:00:13"), click = 3 },
591+
new AsTableLog{ msg = "msg04", createtime = DateTime.Parse("2022-2-8 15:00:13"), click = 4 },
592+
new AsTableLog{ msg = "msg05", createtime = DateTime.Parse("2022-3-8 15:00:13"), click = 5 },
593+
new AsTableLog{ msg = "msg06", createtime = DateTime.Parse("2022-4-8 15:00:13"), click = 6 },
594+
new AsTableLog{ msg = "msg07", createtime = DateTime.Parse("2022-6-8 15:00:13"), click = 7 },
595+
new AsTableLog{ msg = "msg08", createtime = DateTime.Parse("2022-7-1"), click = 8},
596+
new AsTableLog{ msg = "msg09", createtime = DateTime.Parse("2022-7-1 11:00:00"), click = 8}
597+
598+
};
599+
var sqlatb = fsql.Insert(testitems).NoneParameter();
600+
var sqlat = sqlatb.ToSql();
601+
var sqlatr = sqlatb.ExecuteAffrows();
602+
603+
var sqlatc1 = fsql.Delete<AsTableLog>().Where(a => a.id == Guid.NewGuid() && a.createtime == DateTime.Parse("2022-3-8 15:00:13"));
604+
var sqlatca1 = sqlatc1.ToSql();
605+
var sqlatcr1 = sqlatc1.ExecuteAffrows();
606+
607+
var sqlatc2 = fsql.Delete<AsTableLog>().Where(a => a.id == Guid.NewGuid() && a.createtime == DateTime.Parse("2021-3-8 15:00:13"));
608+
var sqlatca2 = sqlatc2.ToSql();
609+
var sqlatcr2 = sqlatc2.ExecuteAffrows();
610+
611+
var sqlatc = fsql.Delete<AsTableLog>().Where(a => a.id == Guid.NewGuid() && a.createtime.Between(DateTime.Parse("2022-3-1"), DateTime.Parse("2022-5-1")));
612+
var sqlatca = sqlatc.ToSql();
613+
var sqlatcr = sqlatc.ExecuteAffrows();
614+
615+
var sqlatd1 = fsql.Update<AsTableLog>().SetSource(testitems[0]);
616+
var sqlatd101 = sqlatd1.ToSql();
617+
var sqlatd102 = sqlatd1.ExecuteAffrows();
618+
619+
var sqlatd2 = fsql.Update<AsTableLog>().SetSource(testitems[5]);
620+
var sqlatd201 = sqlatd2.ToSql();
621+
var sqlatd202 = sqlatd2.ExecuteAffrows();
622+
623+
var sqlatd3 = fsql.Update<AsTableLog>().SetSource(testitems);
624+
var sqlatd301 = sqlatd3.ToSql();
625+
var sqlatd302 = sqlatd3.ExecuteAffrows();
626+
627+
var sqlatd4 = fsql.Update<AsTableLog>(Guid.NewGuid()).Set(a => a.msg == "newmsg");
628+
var sqlatd401 = sqlatd4.ToSql();
629+
var sqlatd402 = sqlatd4.ExecuteAffrows();
630+
631+
var sqlatd5 = fsql.Update<AsTableLog>(Guid.NewGuid()).Set(a => a.msg == "newmsg").Where(a => a.createtime.Between(DateTime.Parse("2022-3-1"), DateTime.Parse("2022-5-1")));
632+
var sqlatd501 = sqlatd5.ToSql();
633+
var sqlatd502 = sqlatd5.ExecuteAffrows();
634+
635+
var sqlatd6 = fsql.Update<AsTableLog>(Guid.NewGuid()).Set(a => a.msg == "newmsg").Where(a => a.createtime > DateTime.Parse("2022-3-1") && a.createtime < DateTime.Parse("2022-5-1"));
636+
var sqlatd601 = sqlatd6.ToSql();
637+
var sqlatd602 = sqlatd6.ExecuteAffrows();
638+
639+
var sqlatd7 = fsql.Update<AsTableLog>(Guid.NewGuid()).Set(a => a.msg == "newmsg").Where(a => a.createtime > DateTime.Parse("2022-3-1"));
640+
var sqlatd701 = sqlatd7.ToSql();
641+
var sqlatd702 = sqlatd7.ExecuteAffrows();
642+
643+
var sqlatd8 = fsql.Update<AsTableLog>(Guid.NewGuid()).Set(a => a.msg == "newmsg").Where(a => a.createtime < DateTime.Parse("2022-5-1"));
644+
var sqlatd801 = sqlatd8.ToSql();
645+
var sqlatd802 = sqlatd8.ExecuteAffrows();
646+
647+
var sqlatd12 = fsql.InsertOrUpdate<AsTableLog>().SetSource(testitems[0]);
648+
var sqlatd1201 = sqlatd12.ToSql();
649+
var sqlatd1202 = sqlatd12.ExecuteAffrows();
650+
651+
var sqlatd22 = fsql.InsertOrUpdate<AsTableLog>().SetSource(testitems[5]);
652+
var sqlatd2201 = sqlatd22.ToSql();
653+
var sqlatd2202 = sqlatd22.ExecuteAffrows();
654+
655+
var sqlatd32 = fsql.InsertOrUpdate<AsTableLog>().SetSource(testitems);
656+
var sqlatd3201 = sqlatd32.ToSql();
657+
var sqlatd3202 = sqlatd32.ExecuteAffrows();
658+
659+
var sqls1 = fsql.Select<AsTableLog>().OrderBy(a => a.createtime);
660+
var sqls101 = sqls1.ToSql();
661+
var sqls102 = sqls1.ToList();
662+
663+
var sqls2 = fsql.Select<AsTableLog>().Where(a => a.createtime.Between(DateTime.Parse("2022-3-1"), DateTime.Parse("2022-5-1")));
664+
var sqls201 = sqls2.ToSql();
665+
var sqls202 = sqls2.ToList();
666+
667+
var sqls3 = fsql.Select<AsTableLog>().Where(a => a.createtime > DateTime.Parse("2022-3-1") && a.createtime < DateTime.Parse("2022-5-1"));
668+
var sqls301 = sqls3.ToSql();
669+
var sqls302 = sqls3.ToList();
670+
671+
var sqls4 = fsql.Select<AsTableLog>().Where(a => a.createtime > DateTime.Parse("2022-3-1"));
672+
var sqls401 = sqls4.ToSql();
673+
var sqls402 = sqls4.ToList();
674+
675+
var sqls5 = fsql.Select<AsTableLog>().Where(a => a.createtime < DateTime.Parse("2022-5-1"));
676+
var sqls501 = sqls5.ToSql();
677+
var sqls502 = sqls5.ToList();
678+
679+
var sqls6 = fsql.Select<AsTableLog>().Where(a => a.createtime < DateTime.Parse("2022-5-1")).Limit(10).OrderBy(a => a.createtime);
680+
var sqls601 = sqls6.ToSql();
681+
var sqls602 = sqls6.ToList();
682+
683+
var sqls7 = fsql.Select<AsTableLog>().Where(a => a.createtime < DateTime.Parse("2022-5-1")).ToAggregate(g => new
684+
{
685+
sum1 = g.Sum(g.Key.click),
686+
cou1 = g.Count(),
687+
avg1 = g.Avg(g.Key.click),
688+
min = g.Min(g.Key.click),
689+
max = g.Max(g.Key.click)
690+
});
691+
692+
693+
var usergroupRepository = fsql.GetAggregateRootRepository<UserGroup>();
694+
usergroupRepository.Delete(a => true);
695+
usergroupRepository.Insert(new[]{
696+
new UserGroup
697+
{
698+
CreateTime = DateTime.Now,
699+
GroupName = "group1",
700+
UpdateTime = DateTime.Now,
701+
Sort = 1,
702+
User1s = new List<User1>
703+
{
704+
new User1 { Nickname = "nickname11", Username = "username11", Description = "desc11" },
705+
new User1 { Nickname = "nickname12", Username = "username12", Description = "desc12" },
706+
new User1 { Nickname = "nickname13", Username = "username13", Description = "desc13" },
707+
}
708+
},
709+
new UserGroup
710+
{
711+
CreateTime = DateTime.Now,
712+
GroupName = "group2",
713+
UpdateTime = DateTime.Now,
714+
Sort = 2,
715+
User1s = new List<User1>
716+
{
717+
new User1 { Nickname = "nickname21", Username = "username21", Description = "desc21" },
718+
new User1 { Nickname = "nickname22", Username = "username22", Description = "desc22" },
719+
new User1 { Nickname = "nickname23", Username = "username23", Description = "desc23" },
720+
}
721+
},
722+
});
723+
var ugroupFirst = usergroupRepository.Select.First();
724+
ugroupFirst.Sort++;
725+
usergroupRepository.Update(ugroupFirst);
726+
var userRepository = fsql.GetAggregateRootRepository<User1>();
727+
728+
var testsublist1 = fsql.Select<UserGroup>()
729+
.First(a => new
730+
{
731+
a.Id,
732+
list = userRepository.Select.Where(b => b.GroupId == a.Id).ToList(),
733+
list2 = userRepository.Select.Where(b => b.GroupId == a.Id).ToList(b => b.Nickname),
734+
});
735+
579736
//fsql.CodeFirst.GetTableByEntity(typeof(User1)).Columns.Values.ToList().ForEach(col =>
580737
//{
581738
// col.Comment = "";
@@ -887,46 +1044,6 @@ static void Main(string[] args)
8871044
Math.PI
8881045
});
8891046

890-
var usergroupRepository = fsql.GetAggregateRootRepository<UserGroup>();
891-
usergroupRepository.Delete(a => true);
892-
usergroupRepository.Insert(new[]{
893-
new UserGroup
894-
{
895-
CreateTime = DateTime.Now,
896-
GroupName = "group1",
897-
UpdateTime = DateTime.Now,
898-
Sort = 1,
899-
User1s = new List<User1>
900-
{
901-
new User1 { Nickname = "nickname11", Username = "username11", Description = "desc11" },
902-
new User1 { Nickname = "nickname12", Username = "username12", Description = "desc12" },
903-
new User1 { Nickname = "nickname13", Username = "username13", Description = "desc13" },
904-
}
905-
},
906-
new UserGroup
907-
{
908-
CreateTime = DateTime.Now,
909-
GroupName = "group2",
910-
UpdateTime = DateTime.Now,
911-
Sort = 2,
912-
User1s = new List<User1>
913-
{
914-
new User1 { Nickname = "nickname21", Username = "username21", Description = "desc21" },
915-
new User1 { Nickname = "nickname22", Username = "username22", Description = "desc22" },
916-
new User1 { Nickname = "nickname23", Username = "username23", Description = "desc23" },
917-
}
918-
},
919-
});
920-
var userRepository = fsql.GetAggregateRootRepository<User1>();
921-
922-
var testsublist1 = fsql.Select<UserGroup>()
923-
.First(a => new
924-
{
925-
a.Id,
926-
list = userRepository.Select.Where(b => b.GroupId == a.Id).ToList(),
927-
list2 = userRepository.Select.Where(b => b.GroupId == a.Id).ToList(b => b.Nickname),
928-
});
929-
9301047
var testsublist2 = fsql.Select<UserGroup>()
9311048
.GroupBy(a => new { a.Id })
9321049
.WithTempQuery(a => a.Key)
@@ -1513,109 +1630,7 @@ int LocalConcurrentDictionaryIsTypeKey(Type dictType, int level = 1)
15131630
// .ToSql();
15141631
#endregion
15151632

1516-
var testitems = new[]
1517-
{
1518-
new AsTableLog{ msg = "msg01", createtime = DateTime.Parse("2022-1-1 13:00:11"), click = 1 },
1519-
new AsTableLog{ msg = "msg02", createtime = DateTime.Parse("2022-1-2 14:00:12"), click = 2 },
1520-
new AsTableLog{ msg = "msg03", createtime = DateTime.Parse("2022-2-2 15:00:13"), click = 3 },
1521-
new AsTableLog{ msg = "msg04", createtime = DateTime.Parse("2022-2-8 15:00:13"), click = 4 },
1522-
new AsTableLog{ msg = "msg05", createtime = DateTime.Parse("2022-3-8 15:00:13"), click = 5 },
1523-
new AsTableLog{ msg = "msg06", createtime = DateTime.Parse("2022-4-8 15:00:13"), click = 6 },
1524-
new AsTableLog{ msg = "msg07", createtime = DateTime.Parse("2022-6-8 15:00:13"), click = 7 },
1525-
new AsTableLog{ msg = "msg07", createtime = DateTime.Parse("2022-7-1"), click = 8}
1526-
};
1527-
var sqlatb = fsql.Insert(testitems).NoneParameter();
1528-
var sqlat = sqlatb.ToSql();
1529-
var sqlatr = sqlatb.ExecuteAffrows();
1530-
1531-
var sqlatc1 = fsql.Delete<AsTableLog>().Where(a => a.id == Guid.NewGuid() && a.createtime == DateTime.Parse("2022-3-8 15:00:13"));
1532-
var sqlatca1 = sqlatc1.ToSql();
1533-
var sqlatcr1 = sqlatc1.ExecuteAffrows();
1534-
1535-
var sqlatc2 = fsql.Delete<AsTableLog>().Where(a => a.id == Guid.NewGuid() && a.createtime == DateTime.Parse("2021-3-8 15:00:13"));
1536-
var sqlatca2 = sqlatc2.ToSql();
1537-
var sqlatcr2 = sqlatc2.ExecuteAffrows();
1538-
1539-
var sqlatc = fsql.Delete<AsTableLog>().Where(a => a.id == Guid.NewGuid() && a.createtime.Between(DateTime.Parse("2022-3-1"), DateTime.Parse("2022-5-1")));
1540-
var sqlatca = sqlatc.ToSql();
1541-
var sqlatcr = sqlatc.ExecuteAffrows();
1542-
1543-
var sqlatd1 = fsql.Update<AsTableLog>().SetSource(testitems[0]);
1544-
var sqlatd101 = sqlatd1.ToSql();
1545-
var sqlatd102 = sqlatd1.ExecuteAffrows();
1546-
1547-
var sqlatd2 = fsql.Update<AsTableLog>().SetSource(testitems[5]);
1548-
var sqlatd201 = sqlatd2.ToSql();
1549-
var sqlatd202 = sqlatd2.ExecuteAffrows();
1550-
1551-
var sqlatd3 = fsql.Update<AsTableLog>().SetSource(testitems);
1552-
var sqlatd301 = sqlatd3.ToSql();
1553-
var sqlatd302 = sqlatd3.ExecuteAffrows();
1554-
1555-
var sqlatd4 = fsql.Update<AsTableLog>(Guid.NewGuid()).Set(a => a.msg == "newmsg");
1556-
var sqlatd401 = sqlatd4.ToSql();
1557-
var sqlatd402 = sqlatd4.ExecuteAffrows();
1558-
1559-
var sqlatd5 = fsql.Update<AsTableLog>(Guid.NewGuid()).Set(a => a.msg == "newmsg").Where(a => a.createtime.Between(DateTime.Parse("2022-3-1"), DateTime.Parse("2022-5-1")));
1560-
var sqlatd501 = sqlatd5.ToSql();
1561-
var sqlatd502 = sqlatd5.ExecuteAffrows();
1562-
1563-
var sqlatd6 = fsql.Update<AsTableLog>(Guid.NewGuid()).Set(a => a.msg == "newmsg").Where(a => a.createtime > DateTime.Parse("2022-3-1") && a.createtime < DateTime.Parse("2022-5-1"));
1564-
var sqlatd601 = sqlatd6.ToSql();
1565-
var sqlatd602 = sqlatd6.ExecuteAffrows();
1566-
1567-
var sqlatd7 = fsql.Update<AsTableLog>(Guid.NewGuid()).Set(a => a.msg == "newmsg").Where(a => a.createtime > DateTime.Parse("2022-3-1"));
1568-
var sqlatd701 = sqlatd7.ToSql();
1569-
var sqlatd702 = sqlatd7.ExecuteAffrows();
1570-
1571-
var sqlatd8 = fsql.Update<AsTableLog>(Guid.NewGuid()).Set(a => a.msg == "newmsg").Where(a => a.createtime < DateTime.Parse("2022-5-1"));
1572-
var sqlatd801 = sqlatd8.ToSql();
1573-
var sqlatd802 = sqlatd8.ExecuteAffrows();
1574-
1575-
var sqlatd12 = fsql.InsertOrUpdate<AsTableLog>().SetSource(testitems[0]);
1576-
var sqlatd1201 = sqlatd12.ToSql();
1577-
var sqlatd1202 = sqlatd12.ExecuteAffrows();
1578-
1579-
var sqlatd22 = fsql.InsertOrUpdate<AsTableLog>().SetSource(testitems[5]);
1580-
var sqlatd2201 = sqlatd22.ToSql();
1581-
var sqlatd2202 = sqlatd22.ExecuteAffrows();
1582-
1583-
var sqlatd32 = fsql.InsertOrUpdate<AsTableLog>().SetSource(testitems);
1584-
var sqlatd3201 = sqlatd32.ToSql();
1585-
var sqlatd3202 = sqlatd32.ExecuteAffrows();
1586-
1587-
var sqls1 = fsql.Select<AsTableLog>().OrderBy(a => a.createtime);
1588-
var sqls101 = sqls1.ToSql();
1589-
var sqls102 = sqls1.ToList();
1590-
1591-
var sqls2 = fsql.Select<AsTableLog>().Where(a => a.createtime.Between(DateTime.Parse("2022-3-1"), DateTime.Parse("2022-5-1")));
1592-
var sqls201 = sqls2.ToSql();
1593-
var sqls202 = sqls2.ToList();
1594-
1595-
var sqls3 = fsql.Select<AsTableLog>().Where(a => a.createtime > DateTime.Parse("2022-3-1") && a.createtime < DateTime.Parse("2022-5-1"));
1596-
var sqls301 = sqls3.ToSql();
1597-
var sqls302 = sqls3.ToList();
1598-
1599-
var sqls4 = fsql.Select<AsTableLog>().Where(a => a.createtime > DateTime.Parse("2022-3-1"));
1600-
var sqls401 = sqls4.ToSql();
1601-
var sqls402 = sqls4.ToList();
1602-
1603-
var sqls5 = fsql.Select<AsTableLog>().Where(a => a.createtime < DateTime.Parse("2022-5-1"));
1604-
var sqls501 = sqls5.ToSql();
1605-
var sqls502 = sqls5.ToList();
1606-
1607-
var sqls6 = fsql.Select<AsTableLog>().Where(a => a.createtime < DateTime.Parse("2022-5-1")).Limit(10).OrderBy(a => a.createtime);
1608-
var sqls601 = sqls6.ToSql();
1609-
var sqls602 = sqls6.ToList();
1610-
1611-
var sqls7 = fsql.Select<AsTableLog>().Where(a => a.createtime < DateTime.Parse("2022-5-1")).ToAggregate(g => new
1612-
{
1613-
sum1 = g.Sum(g.Key.click),
1614-
cou1 = g.Count(),
1615-
avg1 = g.Avg(g.Key.click),
1616-
min = g.Min(g.Key.click),
1617-
max = g.Max(g.Key.click)
1618-
});
1633+
16191634

16201635
fsql.Aop.AuditValue += new EventHandler<FreeSql.Aop.AuditValueEventArgs>((_, e) =>
16211636
{

FreeSql/Internal/CommonProvider/SelectProvider/Select0ProviderReader.cs

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -585,6 +585,29 @@ public GetAllFieldExpressionTreeInfo GetAllFieldExpressionTreeLevel2(bool isRere
585585
var type = tb1.TypeLazy ?? tb1.Type;
586586
var props = tb1.Properties;
587587

588+
if (type == typeof(object) && typeof(T1) == typeof(object))
589+
{
590+
return new GetAllFieldExpressionTreeInfo
591+
{
592+
Field = "*",
593+
Read = (orm, dr) =>
594+
{
595+
//dynamic expando = new DynamicDictionary(); //动态类型字段 可读可写
596+
var expandodic = new Dictionary<string, object>();// (IDictionary<string, object>)expando;
597+
var fc = dr.FieldCount;
598+
for (var a = 0; a < fc; a++)
599+
{
600+
var name = dr.GetName(a);
601+
//expando[name] = row2.GetValue(a);
602+
if (expandodic.ContainsKey(name)) continue;
603+
expandodic.Add(name, Utils.InternalDataReaderGetValue(_commonUtils, dr, a));
604+
}
605+
//expando = expandodic;
606+
return (T1)((object)expandodic);
607+
}
608+
};
609+
}
610+
588611
var ormExp = Expression.Parameter(typeof(IFreeSql), "orm");
589612
var rowExp = Expression.Parameter(typeof(DbDataReader), "row");
590613
var returnTarget = Expression.Label(type);

0 commit comments

Comments
 (0)