- 修复 ToList 父子导航可能匹配不正确的 bug;

This commit is contained in:
28810 2020-03-03 12:36:44 +08:00
parent f0bd6cc625
commit a45cfff5f6
4 changed files with 277 additions and 1 deletions

View File

@ -212,6 +212,56 @@
<param name="size"></param> <param name="size"></param>
<returns></returns> <returns></returns>
</member> </member>
<member name="T:FreeSql.Tests.UnitTest3.BaseModel">
<summary>
父级
</summary>
</member>
<member name="P:FreeSql.Tests.UnitTest3.BaseModel.UserID">
<summary>
创建人
</summary>
</member>
<member name="P:FreeSql.Tests.UnitTest3.BaseModel.CreateTime">
<summary>
创建时间
</summary>
</member>
<member name="P:FreeSql.Tests.UnitTest3.BaseModel.Description">
<summary>
备注
</summary>
</member>
<member name="P:FreeSql.Tests.UnitTest3.Menu.Name">
<summary>
菜单名称
</summary>
</member>
<member name="P:FreeSql.Tests.UnitTest3.Menu.EnName">
<summary>
英文名称
</summary>
</member>
<member name="P:FreeSql.Tests.UnitTest3.Menu.Url">
<summary>
链接地址
</summary>
</member>
<member name="P:FreeSql.Tests.UnitTest3.Menu.ParentID">
<summary>
父级菜单 一级为 0
</summary>
</member>
<member name="P:FreeSql.Tests.UnitTest3.Menu.OperationIds">
<summary>
按钮操作 逗号分隔
</summary>
</member>
<member name="P:FreeSql.Tests.UnitTest3.Menu.Parent">
<summary>
导航属性
</summary>
</member>
<member name="T:SaleIDO.Entity.Storeage.AdjustPriceOrder"> <member name="T:SaleIDO.Entity.Storeage.AdjustPriceOrder">
<summary> <summary>
调价单 调价单

View File

@ -44,9 +44,103 @@ namespace FreeSql.Tests
public DbSet<Author23> Authors { get; set; } public DbSet<Author23> Authors { get; set; }
} }
/// <summary>
/// 父级
/// </summary>
public class BaseModel
{
[Column(IsPrimary = true)]
public string ID { get; set; }
/// <summary>
/// 创建人
/// </summary>
public string UserID { get; set; } = "Admin";
/// <summary>
/// 创建时间
/// </summary>
[Column(ServerTime = DateTimeKind.Utc)]
public DateTime CreateTime { get; set; }
/// <summary>
/// 备注
/// </summary>
public string Description { get; set; }
}
public class Menu : BaseModel
{
public string SubNameID { get; set; }
/// <summary>
/// 菜单名称
/// </summary>
public string Name { get; set; }
/// <summary>
/// 英文名称
/// </summary>
public string EnName { get; set; }
/// <summary>
/// 链接地址
/// </summary>
public string Url { get; set; }
/// <summary>
/// 父级菜单 一级为 0
/// </summary>
public string ParentID { get; set; }
/// <summary>
/// 按钮操作 逗号分隔
/// </summary>
public string OperationIds { get; set; }
/// <summary>
/// 导航属性
/// </summary>
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] [Fact]
public void Test03() public void Test03()
{ {
var subSyetemId = "xxx";
var list = g.sqlite.Select<Menu, SubSystem>()
.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 context = new TestDbContext(g.sqlite);
var sql = context.Songs var sql = context.Songs

View File

@ -2260,6 +2260,137 @@
<param name="parms"></param> <param name="parms"></param>
<returns></returns> <returns></returns>
</member> </member>
<member name="M:FreeSql.IAdo.ExecuteReaderAsync(System.Func{System.Data.Common.DbDataReader,System.Threading.Tasks.Task},System.Data.CommandType,System.String,System.Data.Common.DbParameter[])">
<summary>
查询若使用读写分离查询【从库】条件cmdText.StartsWith("SELECT "),否则查询【主库】
</summary>
<param name="readerHander"></param>
<param name="cmdType"></param>
<param name="cmdText"></param>
<param name="cmdParms"></param>
</member>
<member name="M:FreeSql.IAdo.ExecuteReaderAsync(System.Func{System.Data.Common.DbDataReader,System.Threading.Tasks.Task},System.String,System.Object)">
<summary>
查询ExecuteReaderAsync(dr => {}, "select * from user where age > ?age", new { age = 25 })
</summary>
<param name="cmdText"></param>
<param name="parms"></param>
</member>
<member name="M:FreeSql.IAdo.ExecuteArrayAsync(System.Data.CommandType,System.String,System.Data.Common.DbParameter[])">
<summary>
查询
</summary>
<param name="cmdText"></param>
<param name="cmdParms"></param>
</member>
<member name="M:FreeSql.IAdo.ExecuteArrayAsync(System.String,System.Object)">
<summary>
查询ExecuteArrayAsync("select * from user where age > ?age", new { age = 25 })
</summary>
<param name="cmdText"></param>
<param name="parms"></param>
<returns></returns>
</member>
<member name="M:FreeSql.IAdo.ExecuteDataSetAsync(System.Data.CommandType,System.String,System.Data.Common.DbParameter[])">
<summary>
查询
</summary>
<param name="cmdText"></param>
<param name="cmdParms"></param>
</member>
<member name="M:FreeSql.IAdo.ExecuteDataSetAsync(System.String,System.Object)">
<summary>
查询ExecuteDataSetAsync("select * from user where age > ?age; select 2", new { age = 25 })
</summary>
<param name="cmdText"></param>
<param name="parms"></param>
<returns></returns>
</member>
<member name="M:FreeSql.IAdo.ExecuteDataTableAsync(System.Data.CommandType,System.String,System.Data.Common.DbParameter[])">
<summary>
查询
</summary>
<param name="cmdText"></param>
<param name="cmdParms"></param>
</member>
<member name="M:FreeSql.IAdo.ExecuteDataTableAsync(System.String,System.Object)">
<summary>
查询ExecuteDataTableAsync("select * from user where age > ?age", new { age = 25 })
</summary>
<param name="cmdText"></param>
<param name="parms"></param>
<returns></returns>
</member>
<member name="M:FreeSql.IAdo.ExecuteNonQueryAsync(System.Data.CommandType,System.String,System.Data.Common.DbParameter[])">
<summary>
在【主库】执行
</summary>
<param name="cmdType"></param>
<param name="cmdText"></param>
<param name="cmdParms"></param>
</member>
<member name="M:FreeSql.IAdo.ExecuteNonQueryAsync(System.String,System.Object)">
<summary>
在【主库】执行ExecuteNonQueryAsync("delete from user where age > ?age", new { age = 25 })
</summary>
<param name="cmdText"></param>
<param name="parms"></param>
<returns></returns>
</member>
<member name="M:FreeSql.IAdo.ExecuteScalarAsync(System.Data.CommandType,System.String,System.Data.Common.DbParameter[])">
<summary>
在【主库】执行
</summary>
<param name="cmdType"></param>
<param name="cmdText"></param>
<param name="cmdParms"></param>
</member>
<member name="M:FreeSql.IAdo.ExecuteScalarAsync(System.String,System.Object)">
<summary>
在【主库】执行ExecuteScalarAsync("select 1 from user where age > ?age", new { age = 25 })
</summary>
<param name="cmdText"></param>
<param name="parms"></param>
<returns></returns>
</member>
<member name="M:FreeSql.IAdo.QueryAsync``1(System.Data.CommandType,System.String,System.Data.Common.DbParameter[])">
<summary>
执行SQL返回对象集合QueryAsync&lt;User&gt;("select * from user where age > ?age", new SqlParameter { ParameterName = "age", Value = 25 })
</summary>
<typeparam name="T"></typeparam>
<param name="cmdType"></param>
<param name="cmdText"></param>
<param name="cmdParms"></param>
<returns></returns>
</member>
<member name="M:FreeSql.IAdo.QueryAsync``1(System.String,System.Object)">
<summary>
执行SQL返回对象集合QueryAsync&lt;User&gt;("select * from user where age > ?age", new { age = 25 })
</summary>
<typeparam name="T"></typeparam>
<param name="cmdText"></param>
<param name="parms"></param>
<returns></returns>
</member>
<member name="M:FreeSql.IAdo.QueryAsync``2(System.Data.CommandType,System.String,System.Data.Common.DbParameter[])">
<summary>
执行SQL返回对象集合Query&lt;User&gt;("select * from user where age > ?age; select * from address", new SqlParameter { ParameterName = "age", Value = 25 })
</summary>
<typeparam name="T1"></typeparam>
<param name="cmdType"></param>
<param name="cmdText"></param>
<param name="cmdParms"></param>
<returns></returns>
</member>
<member name="M:FreeSql.IAdo.QueryAsync``2(System.String,System.Object)">
<summary>
执行SQL返回对象集合Query&lt;User&gt;("select * from user where age > ?age; select * from address", new { age = 25 })
</summary>
<typeparam name="T1"></typeparam>
<param name="cmdText"></param>
<param name="parms"></param>
<returns></returns>
</member>
<member name="E:FreeSql.IAop.ParseExpression"> <member name="E:FreeSql.IAop.ParseExpression">
<summary> <summary>
可自定义解析表达式 可自定义解析表达式

View File

@ -1140,7 +1140,8 @@ namespace FreeSql.Internal
if (tsc.style == ExpressionStyle.SelectColumns) if (tsc.style == ExpressionStyle.SelectColumns)
{ {
finds = tsc._tables.Where(a => a.Table.Type == tbtmp.Type && a.Alias == alias).ToArray(); 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.Any()) finds = new[] { finds.First() };
} }
if (finds.Length != 1 && isa && parmExp != null) if (finds.Length != 1 && isa && parmExp != null)