From 1b289c7d0861e713e6bec2fa09640150c7edd5e4 Mon Sep 17 00:00:00 2001 From: 2881099 <2881099@qq.com> Date: Thu, 28 Apr 2022 13:00:24 +0800 Subject: [PATCH] =?UTF-8?q?-=20=E4=BF=AE=E5=A4=8D=208c72d540251c0559e04a25?= =?UTF-8?q?e7d067a2e6eeadbe84=20ToList=20jsonb=20=E6=98=A0=E5=B0=84?= =?UTF-8?q?=EF=BC=8C=E5=BD=B1=E5=93=8D=20v3.2.600=20=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Examples/base_entity/Program.cs | 12 ++++++++++-- .../SqlServer/Curd/SqlServerSelectTest.cs | 19 +++++++++++++++++++ .../SelectProvider/Select1Provider.cs | 11 +++++++++-- 3 files changed, 38 insertions(+), 4 deletions(-) diff --git a/Examples/base_entity/Program.cs b/Examples/base_entity/Program.cs index 71f76025..02baeed9 100644 --- a/Examples/base_entity/Program.cs +++ b/Examples/base_entity/Program.cs @@ -151,6 +151,13 @@ namespace base_entity public DateTime CreateTime { get; set; } public List CouponIds { get; set; } } + class TopicMapTypeToListDtoMap2 + { + public int Id { get; set; } + public int Clicks { get; set; } + public string Title { get; set; } + public DateTime CreateTime { get; set; } + } static void Main(string[] args) { @@ -168,8 +175,8 @@ namespace base_entity //.UseConnectionString(FreeSql.DataType.SqlServer, "Data Source=.;Integrated Security=True;Initial Catalog=freesqlTest;Pooling=true;Max Pool Size=3;TrustServerCertificate=true") - //.UseConnectionString(FreeSql.DataType.PostgreSQL, "Host=192.168.164.10;Port=5432;Username=postgres;Password=123456;Database=tedb;Pooling=true;Maximum Pool Size=2") - //.UseNameConvert(FreeSql.Internal.NameConvertType.ToLower) + .UseConnectionString(FreeSql.DataType.PostgreSQL, "Host=192.168.164.10;Port=5432;Username=postgres;Password=123456;Database=tedb;Pooling=true;Maximum Pool Size=2") + .UseNameConvert(FreeSql.Internal.NameConvertType.ToLower) //.UseConnectionString(FreeSql.DataType.Oracle, "user id=user1;password=123456;data source=//127.0.0.1:1521/XE;Pooling=true;Max Pool Size=2") //.UseNameConvert(FreeSql.Internal.NameConvertType.ToUpper) @@ -236,6 +243,7 @@ namespace base_entity }, }).ExecuteAffrows(); var dtomaplist2 = fsql.Select().ToList(); + var dtomaplist22 = fsql.Select().ToList(); var dtomaplist0 = fsql.Select().ToList(); var dtomaplist1 = fsql.Select().ToList(a => new TopicMapTypeToListDtoMap { diff --git a/FreeSql.Tests/FreeSql.Tests/SqlServer/Curd/SqlServerSelectTest.cs b/FreeSql.Tests/FreeSql.Tests/SqlServer/Curd/SqlServerSelectTest.cs index 52a1742b..e36d5839 100644 --- a/FreeSql.Tests/FreeSql.Tests/SqlServer/Curd/SqlServerSelectTest.cs +++ b/FreeSql.Tests/FreeSql.Tests/SqlServer/Curd/SqlServerSelectTest.cs @@ -1864,6 +1864,25 @@ WHERE (((cast(a.[Id] as nvarchar(100))) in (SELECT TOP 10 b.[Title] Assert.Equal("SELECT TOP 1 a.[id], a.[name] FROM [ToUpd1Pk] a With(UpdLock, RowLock, NoWait)", sql); orm.Select().WithLock(SqlServerLock.UpdLock | SqlServerLock.RowLock | SqlServerLock.NoWait).Limit(1).ToList(); }); + + var sql2 = orm.Select() + .InnerJoin(a => a.Type.Guid == a.Id) + .WithLock() + .ToSql(); + Assert.Equal(@"SELECT a.[Id], a.[Clicks], a.[TypeGuid], a__Type.[Guid], a__Type.[ParentId], a__Type.[Name], a.[Title], a.[CreateTime] +FROM [tb_topic22] a With(NoLock) +INNER JOIN [TestTypeInfo] a__Type With(NoLock) ON a__Type.[Guid] = a.[Id]", sql2); + + sql2 = orm.Select() + .InnerJoin(a => a.Type.Guid == a.Id) + .WithLock(SqlServerLock.NoLock, new Dictionary + { + [typeof(TestTypeInfo)] = true + }) + .ToSql(); + Assert.Equal(@"SELECT a.[Id], a.[Clicks], a.[TypeGuid], a__Type.[Guid], a__Type.[ParentId], a__Type.[Name], a.[Title], a.[CreateTime] +FROM [tb_topic22] a +INNER JOIN [TestTypeInfo] a__Type With(NoLock) ON a__Type.[Guid] = a.[Id]", sql2); } [Fact] public void ForUpdate() diff --git a/FreeSql/Internal/CommonProvider/SelectProvider/Select1Provider.cs b/FreeSql/Internal/CommonProvider/SelectProvider/Select1Provider.cs index 18f93f0f..28dba3c3 100644 --- a/FreeSql/Internal/CommonProvider/SelectProvider/Select1Provider.cs +++ b/FreeSql/Internal/CommonProvider/SelectProvider/Select1Provider.cs @@ -259,8 +259,15 @@ namespace FreeSql.Internal.CommonProvider Expression> GetToListDtoSelector() { var expParam = _tables[0].Parameter ?? Expression.Parameter(typeof(T1), "a"); - var expBinds = _tables[0].Table.Columns.Where(a => a.Value.CsType != a.Value.Attribute.MapType) - .Select(a => Expression.Bind(typeof(TDto).GetProperty(a.Value.CsName), Expression.MakeMemberAccess(expParam, _tables[0].Table.Properties[a.Value.CsName]))) + var expBinds = _tables[0].Table.Columns + .Where(a => a.Value.CsType != a.Value.Attribute.MapType) + .Select(a => new { DtoProperty = typeof(TDto).GetProperty(a.Value.CsName), EntityProperty = _tables[0].Table.Properties[a.Value.CsName], Column = a.Value }) + .Where(a => a.DtoProperty != null) + .Select(a => + a.DtoProperty.PropertyType == a.EntityProperty.PropertyType ? + Expression.Bind(a.DtoProperty, Expression.MakeMemberAccess(expParam, a.EntityProperty)) : + Expression.Bind(a.DtoProperty, Expression.Convert(Expression.MakeMemberAccess(expParam, a.EntityProperty), a.DtoProperty.PropertyType)) + ) .ToArray(); return Expression.Lambda>( Expression.MemberInit(typeof(TDto).InternalNewExpression(), expBinds),