mirror of
https://github.com/nsnail/FreeSql.git
synced 2025-04-22 18:52:50 +08:00
- 修复 ToList 父子导航可能匹配不正确的 bug;
This commit is contained in:
parent
f0bd6cc625
commit
a45cfff5f6
@ -212,6 +212,56 @@
|
||||
<param name="size"></param>
|
||||
<returns></returns>
|
||||
</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">
|
||||
<summary>
|
||||
调价单
|
||||
|
@ -44,9 +44,103 @@ namespace FreeSql.Tests
|
||||
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]
|
||||
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 sql = context.Songs
|
||||
|
@ -2260,6 +2260,137 @@
|
||||
<param name="parms"></param>
|
||||
<returns></returns>
|
||||
</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<User>("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<User>("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<User>("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<User>("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">
|
||||
<summary>
|
||||
可自定义解析表达式
|
||||
|
@ -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)
|
||||
|
Loading…
x
Reference in New Issue
Block a user