From 6c6b98a77d0070e382f35c292da0dc04d32267f4 Mon Sep 17 00:00:00 2001 From: sunkaixuan <610262374@qq.com> Date: Fri, 26 May 2017 01:23:54 +0800 Subject: [PATCH] - --- OrmTest/Demo/Query.cs | 18 ++++--- OrmTest/UnitTest/Mapping .cs | 8 +-- OrmTest/UnitTest/Query/SelectQuery.cs | 2 +- .../QueryableProvider/QueryableProvider.cs | 54 ++++++++++++++++--- SqlSugar/Common/RewritableMethods.cs | 18 ++++++- SqlSugar/Interface/IQueryable.cs | 54 ++++++++++--------- 6 files changed, 110 insertions(+), 44 deletions(-) diff --git a/OrmTest/Demo/Query.cs b/OrmTest/Demo/Query.cs index d23139650..b03cea966 100644 --- a/OrmTest/Demo/Query.cs +++ b/OrmTest/Demo/Query.cs @@ -93,9 +93,9 @@ namespace OrmTest.Demo var list = db.Queryable((st, sc) => new object[] { JoinType.Left,st.SchoolId==sc.Id }) - .Where(sc => sc.Id == 1) - .Where(st => st.Id == 1) - .Where((st, sc) => st.Id == 1 && sc.Id == 2).ToList(); + .Where((st,sc)=> sc.Id == 1) + .Where((st,sc) => st.Id == 1) + .Where((st, sc) => st.Id == 1 && sc.Id == 2).ToList(); //SELECT [st].[Id],[st].[SchoolId],[st].[Name],[st].[CreateTime] FROM [Student] st //Left JOIN School sc ON ( [st].[SchoolId] = [sc].[Id] ) @@ -126,15 +126,15 @@ namespace OrmTest.Demo //join return List var list3 = db.Queryable((st, sc) => new object[] { JoinType.Left,st.SchoolId==sc.Id - }).Select((st,sc)=>new ViewModelStudent { Name= st.Name,SchoolId=sc.Id }).ToList(); + }).Select((st,sc)=>new ViewModelStudent { Name= st.Name,SchoolId=sc.Id }).ToList(); //join Order By (order by st.id desc,sc.id desc) var list4 = db.Queryable((st, sc) => new object[] { JoinType.Left,st.SchoolId==sc.Id }) .OrderBy(st=>st.Id,OrderByType.Desc) - .OrderBy(sc=>sc.Id,OrderByType.Desc) - .Select((st, sc) => new ViewModelStudent { Name = st.Name, SchoolId = sc.Id }).ToList(); + .OrderBy((st,sc)=>sc.Id,OrderByType.Desc) + .Select((st, sc) => new ViewModelStudent { Name = st.Name, SchoolId = sc.Id }).ToList(); } public static void Funs() { @@ -184,6 +184,12 @@ namespace OrmTest.Demo var s3 = db.Queryable().Select(it => new { newid = it.Id }).ToList(); var s4 = db.Queryable().Select(it => new { newid = it.Id, obj = it }).ToList(); var s5 = db.Queryable().Select(it => new ViewModelStudent2 { Student = it, Name = it.Name }).ToList(); + var s6 = db.Queryable((st, sc) => new object[] { + JoinType.Left,st.SchoolId==sc.Id + }) + .OrderBy(st => st.Id, OrderByType.Desc) + .OrderBy((st, sc) => sc.Id, OrderByType.Desc) + .Select((st, sc) => new { Name = st.Name, SchoolId = sc.Id }).ToList(); } private static void Sqlable() diff --git a/OrmTest/UnitTest/Mapping .cs b/OrmTest/UnitTest/Mapping .cs index 7ca93c597..8a911e7c4 100644 --- a/OrmTest/UnitTest/Mapping .cs +++ b/OrmTest/UnitTest/Mapping .cs @@ -27,11 +27,11 @@ namespace OrmTest.UnitTest JoinType.Left,st.SchoolId==sc.Id }) .Where(st => st.Id == 1) - .Where(sc => sc.Id == 1) - .Where((sc, st) => sc.Id == st.Id) + .Where((st,sc) => sc.Id == 1) + .Where((st,sc) => sc.Id == st.Id) .GroupBy(st => st.Id) - .GroupBy(sc => sc.Id).OrderBy(st => st.Id,OrderByType.Asc) - .Select((st,sc)=> new { stid=st.Id,scid=sc.Id}).ToSql(); + .GroupBy((st,sc) => sc.Id).OrderBy(st => st.Id,OrderByType.Asc) + .Select((st,sc)=> new { stid=st.Id,scid=sc.Id}).ToSql(); base.Check(@"SELECT [st].[ID] AS [stid] , [sc].[id] AS [scid] FROM [STudent] st Left JOIN School sc ON ( [st].[SchoolId] =[sc].[id]) WHERE ( [st].[ID] = @Id0 ) AND ( [sc].[id] = @Id1 ) AND ( [sc].[id] = [st].[ID] )GROUP BY [st].[ID],[sc].[id]ORDER BY [st].[ID] ASC ", null, t2.Key, null, " Mapping t2 error"); var x2 = GetInstance(); diff --git a/OrmTest/UnitTest/Query/SelectQuery.cs b/OrmTest/UnitTest/Query/SelectQuery.cs index 4df9eac20..e759edaa3 100644 --- a/OrmTest/UnitTest/Query/SelectQuery.cs +++ b/OrmTest/UnitTest/Query/SelectQuery.cs @@ -62,7 +62,7 @@ namespace OrmTest.UnitTest JoinType.Left,st.Id==st2.Id }) .Where(st => st.Id > 0) - .Select((st, st2) => new { stid = st.Id, scId = st2.Id, xx = st }).ToSql(); + .Select((st, st2) => new { stid = st.Id, scId = st2.Id, xx = st }).ToSql(); base.Check("SELECT [st].[Id] AS [stid] , [st2].[Id] AS [scId] , [st].[Id] AS [School.Id] , [st].[Name] AS [School.Name] FROM [School] st Left JOIN School st2 ON ( [st].[Id] = [st2].[Id] ) WHERE ( [st].[Id] > @Id0 ) " , new List() { diff --git a/SqlSugar/Abstract/QueryableProvider/QueryableProvider.cs b/SqlSugar/Abstract/QueryableProvider/QueryableProvider.cs index 4d08e536c..3f942162d 100644 --- a/SqlSugar/Abstract/QueryableProvider/QueryableProvider.cs +++ b/SqlSugar/Abstract/QueryableProvider/QueryableProvider.cs @@ -10,16 +10,54 @@ using System.Text.RegularExpressions; namespace SqlSugar { - public partial class QueryableProvider : QueryableProvider, ISugarQueryable + public partial class QueryableProvider : QueryableProvider, ISugarQueryable { } - public partial class QueryableProvider : QueryableProvider, ISugarQueryable + public partial class QueryableProvider : QueryableProvider, ISugarQueryable { } - public partial class QueryableProvider : QueryableProvider,ISugarQueryable{ + public partial class QueryableProvider : QueryableProvider, ISugarQueryable + { + public new ISugarQueryable Where(Expression> expression) { + _Where(expression); + return this; + } + public ISugarQueryable Select(Expression> expression) + { + return _Select(expression); + } + public ISugarQueryable Where(Expression> expression) + { + _Where(expression); + return this; + } + + public ISugarQueryable OrderBy(Expression> expression, OrderByType type = OrderByType.Asc) + { + this._OrderBy(expression, type); + return this; + } + + public new ISugarQueryable OrderBy(Expression> expression, OrderByType type) + { + this._OrderBy(expression, type); + return this; + } + + public new ISugarQueryable GroupBy(Expression> expression) + { + _GroupBy(expression); + return this; + } + + public ISugarQueryable GroupBy(Expression> expression) + { + _GroupBy(expression); + return this; + } } public partial class QueryableProvider : QueryableAccessory, ISugarQueryable { @@ -609,7 +647,7 @@ namespace SqlSugar #region Private Methods - private ISugarQueryable _Select(Expression expression) + protected ISugarQueryable _Select(Expression expression) { var reval = InstanceFactory.GetQueryable(this.Context.CurrentConnectionConfig); reval.Context = this.Context; @@ -645,7 +683,7 @@ namespace SqlSugar Having(lamResult.GetResultString()); return this; } - private List _ToList() + protected List _ToList() { List result = null; var sqlObj = this.ToSql(); @@ -666,7 +704,7 @@ namespace SqlSugar RestoreMapping(); return result; } - private List GetPrimaryKeys() + protected List GetPrimaryKeys() { if (this.Context.IsSystemTablesConfig) { @@ -677,7 +715,7 @@ namespace SqlSugar return this.EntityInfo.Columns.Where(it => it.IsPrimarykey).Select(it => it.DbColumnName).ToList(); } } - private List GetIdentityKeys() + protected List GetIdentityKeys() { if (this.Context.IsSystemTablesConfig) { @@ -688,7 +726,7 @@ namespace SqlSugar return this.EntityInfo.Columns.Where(it => it.IsIdentity).Select(it => it.DbColumnName).ToList(); } } - private void RestoreMapping() + protected void RestoreMapping() { if (IsAs) { diff --git a/SqlSugar/Common/RewritableMethods.cs b/SqlSugar/Common/RewritableMethods.cs index 7c3140c66..12dcca0b4 100644 --- a/SqlSugar/Common/RewritableMethods.cs +++ b/SqlSugar/Common/RewritableMethods.cs @@ -85,7 +85,23 @@ namespace SqlSugar { if (readerValues.ContainsKey(name)) { - result.Add(name, readerValues[name]); + var addValue = readerValues[name]; + if (addValue == DBNull.Value) + { + if (item.PropertyType.IsIn(PubConst.IntType, PubConst.DecType, PubConst.Dob, PubConst.ByteType)) + { + addValue = 0; + } + else if (item.PropertyType == PubConst.GuidType) + { + addValue = Guid.Empty; + } + else if (item.PropertyType == PubConst.GuidType) + { + addValue = DateTime.MinValue; + } + } + result.Add(name, addValue); } } } diff --git a/SqlSugar/Interface/IQueryable.cs b/SqlSugar/Interface/IQueryable.cs index 711450855..2095191a9 100644 --- a/SqlSugar/Interface/IQueryable.cs +++ b/SqlSugar/Interface/IQueryable.cs @@ -21,27 +21,27 @@ namespace SqlSugar ISugarQueryable Where(Expression> expression); ISugarQueryable Where(string whereString, object whereObj = null); - ISugarQueryable Where(Expression> expression); - ISugarQueryable Where(Expression> expression); - ISugarQueryable Where(Expression> expression); - ISugarQueryable Where(Expression> expression); - ISugarQueryable Where(Expression> expression); + //ISugarQueryable Where(Expression> expression); + //ISugarQueryable Where(Expression> expression); + //ISugarQueryable Where(Expression> expression); + //ISugarQueryable Where(Expression> expression); + //ISugarQueryable Where(Expression> expression); ISugarQueryable Having(Expression> expression); ISugarQueryable Having(string whereString, object whereObj = null); - ISugarQueryable Having(Expression> expression); - ISugarQueryable Having(Expression> expression); - ISugarQueryable Having(Expression> expression); - ISugarQueryable Having(Expression> expression); - ISugarQueryable Having(Expression> expression); + //ISugarQueryable Having(Expression> expression); + //ISugarQueryable Having(Expression> expression); + //ISugarQueryable Having(Expression> expression); + //ISugarQueryable Having(Expression> expression); + //ISugarQueryable Having(Expression> expression); ISugarQueryable WhereIF(bool isWhere, Expression> expression); ISugarQueryable WhereIF(bool isWhere, string whereString, object whereObj = null); - ISugarQueryable WhereIF(bool isWhere, Expression> expression); - ISugarQueryable WhereIF(bool isWhere, Expression> expression); - ISugarQueryable WhereIF(bool isWhere, Expression> expression); - ISugarQueryable WhereIF(bool isWhere, Expression> expression); - ISugarQueryable WhereIF(bool isWhere, Expression> expression); + //ISugarQueryable WhereIF(bool isWhere, Expression> expression); + //ISugarQueryable WhereIF(bool isWhere, Expression> expression); + //ISugarQueryable WhereIF(bool isWhere, Expression> expression); + //ISugarQueryable WhereIF(bool isWhere, Expression> expression); + //ISugarQueryable WhereIF(bool isWhere, Expression> expression); ISugarQueryable In(params object[] pkValues); T InSingle(object pkValue); @@ -50,10 +50,10 @@ namespace SqlSugar ISugarQueryable OrderBy(string orderFileds); ISugarQueryable OrderBy(Expression> expression, OrderByType type = OrderByType.Asc); - ISugarQueryable OrderBy(Expression> expression, OrderByType type = OrderByType.Asc); + //ISugarQueryable OrderBy(Expression> expression, OrderByType type = OrderByType.Asc); ISugarQueryable GroupBy(Expression> expression); - ISugarQueryable GroupBy(Expression> expression); + //ISugarQueryable GroupBy(Expression> expression); ISugarQueryable GroupBy(string groupFileds); ISugarQueryable Skip(int index); @@ -67,12 +67,12 @@ namespace SqlSugar bool Any(Expression> expression); bool Any(); - ISugarQueryable Select(Expression> expression); - ISugarQueryable Select(Expression> expression); - ISugarQueryable Select(Expression> expression); - ISugarQueryable Select(Expression> expression); - ISugarQueryable Select(Expression> expression); - ISugarQueryable Select(Expression> expression); + //ISugarQueryable Select(Expression> expression); + //ISugarQueryable Select(Expression> expression); + //ISugarQueryable Select(Expression> expression); + //ISugarQueryable Select(Expression> expression); + //ISugarQueryable Select(Expression> expression); + //ISugarQueryable Select(Expression> expression); ISugarQueryable Select(Expression> expression); ISugarQueryable Select(string select) where TResult : class, new(); ISugarQueryable Select(string select); @@ -109,7 +109,13 @@ namespace SqlSugar } public partial interface ISugarQueryable : ISugarQueryable { - + new ISugarQueryable Where(Expression> expression); + ISugarQueryable Where(Expression> expression); + ISugarQueryable Select(Expression> expression); + new ISugarQueryable OrderBy(Expression> expression, OrderByType type = OrderByType.Asc); + ISugarQueryable OrderBy(Expression> expression, OrderByType type = OrderByType.Asc); + new ISugarQueryable GroupBy(Expression> expression); + ISugarQueryable GroupBy(Expression> expression); } public partial interface ISugarQueryable : ISugarQueryable {