From 915af57baaab2b96e5905c58481ad1ac0660fef3 Mon Sep 17 00:00:00 2001 From: 28810 <28810@YEXIANGQIN> Date: Mon, 9 Sep 2019 15:11:25 +0800 Subject: [PATCH] =?UTF-8?q?-=20=E4=BF=AE=E5=A4=8D=20=E5=B1=9E=E6=80=A7?= =?UTF-8?q?=E6=97=A0set=E8=87=AA=E5=8A=A8=E5=BF=BD=E7=95=A5=E7=9A=84bug?= =?UTF-8?q?=EF=BC=9B=20-=20=E4=BC=98=E5=8C=96=20ISelect`1.Include=E4=B9=8B?= =?UTF-8?q?=E5=90=8EToList=E5=8F=82=E6=95=B0includeNestedMembers=E9=BB=98?= =?UTF-8?q?=E8=AE=A4=E4=B8=BAtrue=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FreeSql.Tests/FreeSql.Tests/UnitTest1.cs | 4 ++++ .../CommonProvider/SelectProvider/Select0Provider.cs | 4 ++-- .../CommonProvider/SelectProvider/Select1Provider.cs | 5 +++++ FreeSql/Internal/UtilsExpressionTree.cs | 5 +++++ 4 files changed, 16 insertions(+), 2 deletions(-) diff --git a/FreeSql.Tests/FreeSql.Tests/UnitTest1.cs b/FreeSql.Tests/FreeSql.Tests/UnitTest1.cs index a2b00e45..a8af4dc3 100644 --- a/FreeSql.Tests/FreeSql.Tests/UnitTest1.cs +++ b/FreeSql.Tests/FreeSql.Tests/UnitTest1.cs @@ -405,6 +405,10 @@ namespace FreeSql.Tests [Fact] public void Test1() { + var testincludeMemberssql1 = g.sqlite.Select().Where(a => a.Templates.Title == "1").ToList(); + var testincludeMemberssql2 = g.sqlite.Select().Include(a => a.Templates).ToList(); + + var floorSql1 = g.mysql.Select().Where(a => a.OptionsEntity04 / 10000 == 121212 / 10000).ToSql(); var floorSql2 = g.mysql.Select().Where(a => a.OptionsEntity04 / 10000.0 == 121212 / 10000).ToSql(); diff --git a/FreeSql/Internal/CommonProvider/SelectProvider/Select0Provider.cs b/FreeSql/Internal/CommonProvider/SelectProvider/Select0Provider.cs index fde203e8..225c04c5 100644 --- a/FreeSql/Internal/CommonProvider/SelectProvider/Select0Provider.cs +++ b/FreeSql/Internal/CommonProvider/SelectProvider/Select0Provider.cs @@ -472,12 +472,12 @@ namespace FreeSql.Internal.CommonProvider return ToListAfPrivateAsync(sql, af, otherData); } - public List ToList(bool includeNestedMembers = false) + public virtual List ToList(bool includeNestedMembers = false) { if (_selectExpression != null) return this.InternalToList(_selectExpression); return this.ToListPrivate(includeNestedMembers == false ? this.GetAllFieldExpressionTreeLevel2() : this.GetAllFieldExpressionTreeLevelAll(), null); } - public Task> ToListAsync(bool includeNestedMembers = false) + public virtual Task> ToListAsync(bool includeNestedMembers = false) { if (_selectExpression != null) return this.InternalToListAsync(_selectExpression); return this.ToListPrivateAsync(includeNestedMembers == false ? this.GetAllFieldExpressionTreeLevel2() : this.GetAllFieldExpressionTreeLevelAll(), null); diff --git a/FreeSql/Internal/CommonProvider/SelectProvider/Select1Provider.cs b/FreeSql/Internal/CommonProvider/SelectProvider/Select1Provider.cs index 5f82840d..76f84598 100644 --- a/FreeSql/Internal/CommonProvider/SelectProvider/Select1Provider.cs +++ b/FreeSql/Internal/CommonProvider/SelectProvider/Select1Provider.cs @@ -384,6 +384,10 @@ namespace FreeSql.Internal.CommonProvider public TDto First() => this.ToOne(); public Task FirstAsync() => this.ToOneAsync(); + public override List ToList(bool includeNestedMembers = false) => base.ToList(_isIncluded || includeNestedMembers); + public override Task> ToListAsync(bool includeNestedMembers = false) => base.ToListAsync(_isIncluded || includeNestedMembers); + + bool _isIncluded = false; public ISelect Include(Expression> navigateSelector) where TNavigate : class { var expBody = navigateSelector?.Body; @@ -391,6 +395,7 @@ namespace FreeSql.Internal.CommonProvider var tb = _commonUtils.GetTableByEntity(expBody.Type); if (tb == null) throw new Exception("Include 参数类型错误"); + _isIncluded = true; _commonExpression.ExpressionWhereLambda(_tables, Expression.MakeMemberAccess(expBody, tb.Properties[tb.ColumnsByCs.First().Value.CsName]), null, null); return this; } diff --git a/FreeSql/Internal/UtilsExpressionTree.cs b/FreeSql/Internal/UtilsExpressionTree.cs index 76dd4aaf..6d1b55c1 100644 --- a/FreeSql/Internal/UtilsExpressionTree.cs +++ b/FreeSql/Internal/UtilsExpressionTree.cs @@ -76,6 +76,11 @@ namespace FreeSql.Internal var setMethod = trytb.Type.GetMethod($"set_{p.Name}"); var colattr = common.GetEntityColumnAttribute(entity, p); var tp = common.CodeFirst.GetDbInfo(colattr?.MapType ?? p.PropertyType); + if (setMethod == null) // 属性没有 set自动忽略 + { + if (colattr == null) colattr = new ColumnAttribute { IsIgnore = true }; + else colattr.IsIgnore = true; + } if (tp == null && colattr?.IsIgnore != true) { if (common.CodeFirst.IsLazyLoading)