From a45cfff5f696c4c51fa4455c29e5f4a0f8925739 Mon Sep 17 00:00:00 2001 From: 28810 <28810@YEXIANGQIN> Date: Tue, 3 Mar 2020 12:36:44 +0800 Subject: [PATCH] =?UTF-8?q?-=20=E4=BF=AE=E5=A4=8D=20ToList=20=E7=88=B6?= =?UTF-8?q?=E5=AD=90=E5=AF=BC=E8=88=AA=E5=8F=AF=E8=83=BD=E5=8C=B9=E9=85=8D?= =?UTF-8?q?=E4=B8=8D=E6=AD=A3=E7=A1=AE=E7=9A=84=20bug=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FreeSql.Tests/FreeSql.Tests/FreeSql.Tests.xml | 50 +++++++ FreeSql.Tests/FreeSql.Tests/UnitTest3.cs | 94 +++++++++++++ FreeSql/FreeSql.xml | 131 ++++++++++++++++++ FreeSql/Internal/CommonExpression.cs | 3 +- 4 files changed, 277 insertions(+), 1 deletion(-) diff --git a/FreeSql.Tests/FreeSql.Tests/FreeSql.Tests.xml b/FreeSql.Tests/FreeSql.Tests/FreeSql.Tests.xml index d6732b50..6750270a 100644 --- a/FreeSql.Tests/FreeSql.Tests/FreeSql.Tests.xml +++ b/FreeSql.Tests/FreeSql.Tests/FreeSql.Tests.xml @@ -212,6 +212,56 @@ + + + 父级 + + + + + 创建人 + + + + + 创建时间 + + + + + 备注 + + + + + 菜单名称 + + + + + 英文名称 + + + + + 链接地址 + + + + + 父级菜单 一级为 0 + + + + + 按钮操作 逗号分隔 + + + + + 导航属性 + + 调价单 diff --git a/FreeSql.Tests/FreeSql.Tests/UnitTest3.cs b/FreeSql.Tests/FreeSql.Tests/UnitTest3.cs index c468a7a7..49ecb36e 100644 --- a/FreeSql.Tests/FreeSql.Tests/UnitTest3.cs +++ b/FreeSql.Tests/FreeSql.Tests/UnitTest3.cs @@ -44,9 +44,103 @@ namespace FreeSql.Tests public DbSet Authors { get; set; } } + /// + /// 父级 + /// + public class BaseModel + { + [Column(IsPrimary = true)] + public string ID { get; set; } + + /// + /// 创建人 + /// + public string UserID { get; set; } = "Admin"; + + /// + /// 创建时间 + /// + [Column(ServerTime = DateTimeKind.Utc)] + public DateTime CreateTime { get; set; } + + /// + /// 备注 + /// + public string Description { get; set; } + } + public class Menu : BaseModel + { + public string SubNameID { get; set; } + + /// + /// 菜单名称 + /// + public string Name { get; set; } + + /// + /// 英文名称 + /// + public string EnName { get; set; } + + /// + /// 链接地址 + /// + public string Url { get; set; } + + /// + /// 父级菜单 一级为 0 + /// + public string ParentID { get; set; } + + /// + /// 按钮操作 逗号分隔 + /// + public string OperationIds { get; set; } + + /// + /// 导航属性 + /// + public virtual Menu Parent { get; set; } + + + [Column(IsIgnore = true)] + public string OperationNames { get; set; } + + [Column(IsIgnore = true)] + public string SystemName { get; set; } + + } + class SubSystem + { + public string Id { get; set; } + public string Name { get; set; } + } + [Fact] public void Test03() { + var subSyetemId = "xxx"; + var list = g.sqlite.Select() + .LeftJoin((a,b) => a.SubNameID == b.Id) + .WhereIf(!string.IsNullOrEmpty(subSyetemId), (a, s) => a.SubNameID == subSyetemId) + .ToList((a, s) => new Menu + { + ID = a.ID, + SystemName = s.Name, + SubNameID = s.Id, + CreateTime = a.CreateTime, + Description = a.Description, + EnName = a.EnName, + Name = a.Name, + OperationIds = a.OperationIds, + Parent = a.Parent, + ParentID = a.ParentID, + Url = a.Url, + UserID = a.UserID + }); + + + var context = new TestDbContext(g.sqlite); var sql = context.Songs diff --git a/FreeSql/FreeSql.xml b/FreeSql/FreeSql.xml index 784479be..08d2c1b3 100644 --- a/FreeSql/FreeSql.xml +++ b/FreeSql/FreeSql.xml @@ -2260,6 +2260,137 @@ + + + 查询,若使用读写分离,查询【从库】条件cmdText.StartsWith("SELECT "),否则查询【主库】 + + + + + + + + + 查询,ExecuteReaderAsync(dr => {}, "select * from user where age > ?age", new { age = 25 }) + + + + + + + 查询 + + + + + + + 查询,ExecuteArrayAsync("select * from user where age > ?age", new { age = 25 }) + + + + + + + + 查询 + + + + + + + 查询,ExecuteDataSetAsync("select * from user where age > ?age; select 2", new { age = 25 }) + + + + + + + + 查询 + + + + + + + 查询,ExecuteDataTableAsync("select * from user where age > ?age", new { age = 25 }) + + + + + + + + 在【主库】执行 + + + + + + + + 在【主库】执行,ExecuteNonQueryAsync("delete from user where age > ?age", new { age = 25 }) + + + + + + + + 在【主库】执行 + + + + + + + + 在【主库】执行,ExecuteScalarAsync("select 1 from user where age > ?age", new { age = 25 }) + + + + + + + + 执行SQL返回对象集合,QueryAsync<User>("select * from user where age > ?age", new SqlParameter { ParameterName = "age", Value = 25 }) + + + + + + + + + + 执行SQL返回对象集合,QueryAsync<User>("select * from user where age > ?age", new { age = 25 }) + + + + + + + + + 执行SQL返回对象集合,Query<User>("select * from user where age > ?age; select * from address", new SqlParameter { ParameterName = "age", Value = 25 }) + + + + + + + + + + 执行SQL返回对象集合,Query<User>("select * from user where age > ?age; select * from address", new { age = 25 }) + + + + + + 可自定义解析表达式 diff --git a/FreeSql/Internal/CommonExpression.cs b/FreeSql/Internal/CommonExpression.cs index 6a121cdb..f9e424d1 100644 --- a/FreeSql/Internal/CommonExpression.cs +++ b/FreeSql/Internal/CommonExpression.cs @@ -1140,7 +1140,8 @@ namespace FreeSql.Internal if (tsc.style == ExpressionStyle.SelectColumns) { finds = tsc._tables.Where(a => a.Table.Type == tbtmp.Type && a.Alias == alias).ToArray(); - if (finds.Length != 1) finds = tsc._tables.Where(a => a.Table.Type == tbtmp.Type).ToArray(); + if (finds.Any() == false && alias.Contains("__") == false) + finds = tsc._tables.Where(a => a.Table.Type == tbtmp.Type).ToArray(); if (finds.Any()) finds = new[] { finds.First() }; } if (finds.Length != 1 && isa && parmExp != null)