From eb66d8ef0b5866a67d4860a4c74cb233178e06eb Mon Sep 17 00:00:00 2001 From: sunkaixuan <610262374@qq.com> Date: Sun, 14 Oct 2018 09:26:53 +0800 Subject: [PATCH] Add Queryable().Mapper --- Src/Asp.Net/SqlServerTest/Demos/G_Mapper.cs | 28 +++++++++++++++++++ Src/Asp.Net/SqlServerTest/Program.cs | 1 + .../SqlServerTest/SqlServerTest.csproj | 1 + .../QueryableProvider/QueryableProvider.cs | 26 +++++++++++++++++ Src/Asp.Net/SqlSugar/Interface/IQueryable.cs | 1 + 5 files changed, 57 insertions(+) create mode 100644 Src/Asp.Net/SqlServerTest/Demos/G_Mapper.cs diff --git a/Src/Asp.Net/SqlServerTest/Demos/G_Mapper.cs b/Src/Asp.Net/SqlServerTest/Demos/G_Mapper.cs new file mode 100644 index 000000000..b0f6ad9cf --- /dev/null +++ b/Src/Asp.Net/SqlServerTest/Demos/G_Mapper.cs @@ -0,0 +1,28 @@ +using OrmTest.Models; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace OrmTest.Demo +{ + public class Mapper : DemoBase + { + public static void Init() + { + var db = GetInstance(); + + //auto fill ViewModelStudent3 + var s11 = db.Queryable((st, sc) => st.SchoolId == sc.Id) + .Select().ToList(); + + + var s12 = db.Queryable((st, sc) => st.SchoolId == sc.Id) + .Select().Mapper(it=> { + it.Name = it.Name==null?"默认值":it.Name; + it.CreateTime = DateTime.Now.Date; + it.Id = it.Id*1000; + }).ToList(); + } + } +} diff --git a/Src/Asp.Net/SqlServerTest/Program.cs b/Src/Asp.Net/SqlServerTest/Program.cs index 1f424bdf3..1526cc27f 100644 --- a/Src/Asp.Net/SqlServerTest/Program.cs +++ b/Src/Asp.Net/SqlServerTest/Program.cs @@ -51,6 +51,7 @@ namespace OrmTest Demo.ExtSqlFun.Init(); Demo.QueryableView.Init(); Demo.AttributeDemo.Init(); + Demo.Mapper.Init(); } } } diff --git a/Src/Asp.Net/SqlServerTest/SqlServerTest.csproj b/Src/Asp.Net/SqlServerTest/SqlServerTest.csproj index c6c826100..b75801913 100644 --- a/Src/Asp.Net/SqlServerTest/SqlServerTest.csproj +++ b/Src/Asp.Net/SqlServerTest/SqlServerTest.csproj @@ -48,6 +48,7 @@ + diff --git a/Src/Asp.Net/SqlSugar/Abstract/QueryableProvider/QueryableProvider.cs b/Src/Asp.Net/SqlSugar/Abstract/QueryableProvider/QueryableProvider.cs index 9bbb8620f..ac832c983 100644 --- a/Src/Asp.Net/SqlSugar/Abstract/QueryableProvider/QueryableProvider.cs +++ b/Src/Asp.Net/SqlSugar/Abstract/QueryableProvider/QueryableProvider.cs @@ -22,6 +22,7 @@ namespace SqlSugar public ISqlBuilder SqlBuilder { get; set; } public MappingTableList OldMappingTableList { get; set; } public MappingTableList QueryableMappingTableList { get; set; } + public Action MapperAction { get; set; } public bool IsCache { get; set; } public int CacheTime { get; set; } public bool IsAs { get; set; } @@ -70,6 +71,11 @@ namespace SqlSugar return this; } + public virtual ISugarQueryable Mapper(Action mapperAction) { + this.MapperAction = mapperAction; + return this; + } + public virtual ISugarQueryable AddParameters(object parameters) { if (parameters != null) @@ -1096,8 +1102,27 @@ namespace SqlSugar result = GetData(sqlObj); } RestoreMapping(); + _Mapper(result); return result; } + + protected void _Mapper(List result) + { + if (this.MapperAction != null) + { + foreach (TResult item in result) + { + if (typeof(TResult) == typeof(T)) + { + MapperAction((T)Convert.ChangeType(item, typeof(T))); + } + else { + Check.Exception(true, "{0} and {1} are not a type, Try .select().mapper().ToList", typeof(TResult).FullName,typeof(T).FullName); + } + } + } + } + protected int GetCount() { var sql = string.Empty; @@ -1233,6 +1258,7 @@ namespace SqlSugar asyncQueryableBuilder.OrderByValue = this.QueryBuilder.OrderByValue; asyncQueryableBuilder.IsDisabledGobalFilter = this.QueryBuilder.IsDisabledGobalFilter; asyncQueryableBuilder.PartitionByValue = this.QueryBuilder.PartitionByValue; + asyncQueryableBuilder.JoinExpression = this.QueryBuilder.JoinExpression; return asyncQueryable; } #endregion diff --git a/Src/Asp.Net/SqlSugar/Interface/IQueryable.cs b/Src/Asp.Net/SqlSugar/Interface/IQueryable.cs index 8aed82494..d98d62b4b 100644 --- a/Src/Asp.Net/SqlSugar/Interface/IQueryable.cs +++ b/Src/Asp.Net/SqlSugar/Interface/IQueryable.cs @@ -19,6 +19,7 @@ namespace SqlSugar ISugarQueryable AS(string tableName); ISugarQueryable With(string withString); ISugarQueryable Filter(string FilterName, bool isDisabledGobalFilter = false); + ISugarQueryable Mapper(Action mapperAction); ISugarQueryable AddParameters(object parameters); ISugarQueryable AddParameters(SugarParameter[] parameters); ISugarQueryable AddParameters(List parameters);