Update Core

This commit is contained in:
sunkaixuan 2017-11-28 13:17:18 +08:00
parent a1f9df6664
commit 90609f758d
36 changed files with 781 additions and 112 deletions

View File

@ -26,6 +26,80 @@ namespace OrmTest.Demo
StoredProcedure(); StoredProcedure();
Enum(); Enum();
Simple(); Simple();
Async();
Subqueryable();
SqlQueryable();
}
private static void SqlQueryable()
{
var db = GetInstance();
var list = db.SqlQueryable<Student>("select * from student").ToPageList(1, 2);
}
private static void Subqueryable()
{
var db = GetInstance();
var getAll11 = db.Queryable<Student>().Where(it => SqlFunc.Subqueryable<School>().Where(s => s.Id == it.Id).Max(s=>s.Id)==1).ToList();
var getAll7 = db.Queryable<Student>().Where(it => SqlFunc.Subqueryable<School>().Where(s => s.Id == it.Id).Any()).ToList();
var getAll9 = db.Queryable<Student>().Where(it => SqlFunc.Subqueryable<School>().Where(s => s.Id == it.Id).Count()==1).ToList();
var getAll10 = db.Queryable<Student>().Where(it => SqlFunc.Subqueryable<School>().Where(s => s.Id == it.Id).OrderBy(s=>s.Id).Select(s=>s.Id) == 1).ToList();
var getAll14 = db.Queryable<Student>().Where(it => SqlFunc.Subqueryable<School>().Where(s => s.Id == it.Id).OrderByDesc(s => s.Id).Select(s => s.Id) == 1).ToList();
var getAll8= db.Queryable<Student>().Where(it => SqlFunc.Subqueryable<School>().Where(s => s.Id == it.Id).Where(s=>s.Name==it.Name).NotAny()).ToList();
var getAll1 = db.Queryable<Student>().Where(it => it.Id == SqlFunc.Subqueryable<School>().Where(s => s.Id == it.Id).Select(s => s.Id)).ToList();
var getAll2 = db.Queryable<Student, School>((st, sc) => new object[] {
JoinType.Left,st.Id==sc.Id
})
.Where(st => st.Id == SqlFunc.Subqueryable<School>().Where(s => s.Id == st.Id).Select(s => s.Id))
.ToList();
var getAll3 = db.Queryable<Student, School>((st, sc) => new object[] {
JoinType.Left,st.Id==sc.Id
})
.Select(st =>
new
{
name = st.Name,
id = SqlFunc.Subqueryable<School>().Where(s => s.Id == st.Id).Select(s => s.Id)
})
.ToList();
var getAll4 = db.Queryable<Student>().Select(it =>
new
{
name = it.Name,
id = SqlFunc.Subqueryable<School>().Where(s => s.Id == it.Id).Select(s => s.Id)
}).ToList();
var getAll5 = db.Queryable<Student>().Select(it =>
new Student
{
Name = it.Name,
Id = SqlFunc.Subqueryable<School>().Where(s => s.Id == it.Id).Select(s => s.Id)
}).ToList();
}
private static void Async()
{
var db = GetInstance();
var list = db.Queryable<Student>().Where(it => it.Id == 1).SingleAsync();
list.Wait();
var list2 = db.Queryable<Student>().SingleAsync(it => it.Id == 1);
list2.Wait();
var list3 = db.Queryable<Student>().Where(it => it.Id == 1).ToListAsync();
list3.Wait();
var list4 = db.Queryable<Student>().Where(it => it.Id == 1).ToPageListAsync(1, 2);
list4.Wait();
} }
private static void Simple() private static void Simple()
@ -40,10 +114,10 @@ namespace OrmTest.Demo
sdb.DeleteById<Student>(1); sdb.DeleteById<Student>(1);
sdb.Insert(new Student() { Name = "xx" }); sdb.Insert(new Student() { Name = "xx" });
sdb.Update<Student>(it => new Student { Name = "newvalue" }, it => it.Id == 1);//only update name where id=1 sdb.Update<Student>(it => new Student { Name = "newvalue" }, it => it.Id == 1);//only update name where id=1
sdb.Update(new Student() { Name="newavalue" ,Id=1});//update all where id=1 sdb.Update(new Student() { Name = "newavalue", Id = 1 });//update all where id=1
//SimpleClient Get SqlSugarClient //SimpleClient Get SqlSugarClient
var student3=sdb.FullClient.Queryable<Student>().InSingle(1); var student3 = sdb.FullClient.Queryable<Student>().InSingle(1);
} }
@ -75,11 +149,21 @@ namespace OrmTest.Demo
outPutValue = p2.Value; outPutValue = p2.Value;
return dbResult; return dbResult;
}); });
//3
var dt = db.Ado.UseStoredProcedure().GetDataTable("sp_school", new { p1 = 1, p2 = 2 });
var p11 = new SugarParameter("@p1", "1");
var p22 = new SugarParameter("@p2", null, true);//isOutput=true
//4
var dt2 = db.Ado.UseStoredProcedure().SqlQuery<School>("sp_school", p11, p22);
} }
private static void Tran() private static void Tran()
{ {
var db = GetInstance(); var db = GetInstance();
var x=db.Insertable(new Student() { CreateTime = DateTime.Now, Name = "tran" }).ExecuteCommand(); var x = db.Insertable(new Student() { CreateTime = DateTime.Now, Name = "tran" }).ExecuteCommand();
//1. no result //1. no result
var result = db.Ado.UseTran(() => var result = db.Ado.UseTran(() =>
{ {
@ -128,11 +212,13 @@ namespace OrmTest.Demo
// group id,name take first // group id,name take first
var list3 = db.Queryable<Student>() var list3 = db.Queryable<Student>()
.PartitionBy(it => new { it.Id, it.Name }).Take(1).ToList(); .PartitionBy(it => new { it.Id, it.Name }).Take(1).ToList();
var list31 = db.Queryable<Student>()
.PartitionBy(it => new { it.Id, it.Name }).Take(1).Count();
int count = 0; int count = 0;
var list4 = db.Queryable<Student, School>((st, sc) => st.SchoolId == sc.Id) var list4 = db.Queryable<Student, School>((st, sc) => st.SchoolId == sc.Id)
.PartitionBy(st => new { st.Name }).Take(1).OrderBy(st => st.Id,OrderByType.Desc).Select(st => st).ToPageList(1, 1000, ref count); .PartitionBy(st => new { st.Name }).Take(2).OrderBy(st => st.Id, OrderByType.Desc).Select(st => st).ToPageList(1, 1000, ref count);
//SqlFunc.AggregateSum(object thisValue) //SqlFunc.AggregateSum(object thisValue)
//SqlFunc.AggregateAvg<TResult>(TResult thisValue) //SqlFunc.AggregateAvg<TResult>(TResult thisValue)
@ -148,6 +234,7 @@ namespace OrmTest.Demo
var t2 = db.Ado.GetInt("select 1"); var t2 = db.Ado.GetInt("select 1");
var t3 = db.Ado.GetDataTable("select 1 as id"); var t3 = db.Ado.GetDataTable("select 1 as id");
db.Ado.CommitTran(); db.Ado.CommitTran();
var t11 = db.Ado.SqlQuery<Student>("select * from student");
//more //more
//db.Ado.GetXXX... //db.Ado.GetXXX...
} }
@ -160,14 +247,16 @@ namespace OrmTest.Demo
var getNew = db.Queryable<Student>().Where(it => it.Id == 1).Select(it => new { id = SqlFunc.IIF(it.Id == 0, 1, it.Id), it.Name, it.SchoolId }).ToList(); var getNew = db.Queryable<Student>().Where(it => it.Id == 1).Select(it => new { id = SqlFunc.IIF(it.Id == 0, 1, it.Id), it.Name, it.SchoolId }).ToList();
var getAllNoLock = db.Queryable<Student>().With(SqlWith.NoLock).ToList(); var getAllNoLock = db.Queryable<Student>().With(SqlWith.NoLock).ToList();
var getByPrimaryKey = db.Queryable<Student>().InSingle(2); var getByPrimaryKey = db.Queryable<Student>().InSingle(2);
var getSingleOrDefault = db.Queryable<Student>().Where(it=>it.Id==1).Single(); var getSingleOrDefault = db.Queryable<Student>().Where(it => it.Id == 1).Single();
var getFirstOrDefault = db.Queryable<Student>().First(); var getFirstOrDefault = db.Queryable<Student>().First();
var getByWhere = db.Queryable<Student>().Where(it => it.Id == 1 || it.Name == "a").ToList(); var getByWhere = db.Queryable<Student>().Where(it => it.Id == 1 || it.Name == "a").ToList();
var getByFuns = db.Queryable<Student>().Where(it => SqlFunc.IsNullOrEmpty(it.Name)).ToList(); var getByFuns = db.Queryable<Student>().Where(it => SqlFunc.IsNullOrEmpty(it.Name)).ToList();
var sum = db.Queryable<Student>().Select(it => it.SchoolId).ToList(); var sum = db.Queryable<Student>().Select(it => it.SchoolId).ToList();
var sum2 = db.Queryable<Student,School>((st,sc)=>st.SchoolId==sc.Id).Sum((st,sc) => sc.Id); var sum2 = db.Queryable<Student, School>((st, sc) => st.SchoolId == sc.Id).Sum((st, sc) => sc.Id);
var isAny = db.Queryable<Student>().Where(it => it.Id == -1).Any(); var isAny = db.Queryable<Student>().Where(it => it.Id == -1).Any();
var isAny2 = db.Queryable<Student>().Any(it => it.Id == -1); var isAny2 = db.Queryable<Student>().Any(it => it.Id == -1);
var count = db.Queryable<Student>().Count(it => it.Id > 0);
var date = db.Queryable<Student>().Where(it => it.CreateTime.Value.Date == DateTime.Now.Date).ToList();
var getListByRename = db.Queryable<School>().AS("Student").ToList(); var getListByRename = db.Queryable<School>().AS("Student").ToList();
var in1 = db.Queryable<Student>().In(it => it.Id, new int[] { 1, 2, 3 }).ToList(); var in1 = db.Queryable<Student>().In(it => it.Id, new int[] { 1, 2, 3 }).ToList();
var in2 = db.Queryable<Student>().In(new int[] { 1, 2, 3 }).ToList(); var in2 = db.Queryable<Student>().In(new int[] { 1, 2, 3 }).ToList();
@ -183,11 +272,28 @@ namespace OrmTest.Demo
var joinSql = db.Queryable("student", "s").OrderBy("id").Select("id,name").ToPageList(1, 2); var joinSql = db.Queryable("student", "s").OrderBy("id").Select("id,name").ToPageList(1, 2);
var getDay1List = db.Queryable<Student>().Where(it=>it.CreateTime.Value.Hour==1).ToList(); var getDay1List = db.Queryable<Student>().Where(it => it.CreateTime.Value.Hour == 1).ToList();
var getDateAdd = db.Queryable<Student>().Where(it => it.CreateTime.Value.AddDays(1)==DateTime.Now).ToList(); var getDateAdd = db.Queryable<Student>().Where(it => it.CreateTime.Value.AddDays(1) == DateTime.Now).ToList();
var getDateIsSame= db.Queryable<Student>().Where(it => SqlFunc.DateIsSame(DateTime.Now,DateTime.Now,DateType.Hour)).ToList(); var getDateIsSame = db.Queryable<Student>().Where(it => SqlFunc.DateIsSame(DateTime.Now, DateTime.Now, DateType.Hour)).ToList();
var getSqlList = db.Queryable<Student>().AS("(select * from student) t").ToList(); var getSqlList = db.Queryable<Student>().AS("(select * from student) t").ToList();
var getUnionAllList = db.UnionAll(db.Queryable<Student>().Where(it => it.Id == 1), db.Queryable<Student>().Where(it => it.Id == 2)).ToList();
var getUnionAllList2 = db.UnionAll(db.Queryable<Student>(), db.Queryable<Student>()).ToList();
var test1 = db.Queryable<Student, School>((st, sc) => st.SchoolId == sc.Id).Where(st=>st.CreateTime>SqlFunc.GetDate()).Select((st, sc) => SqlFunc.ToInt64(sc.Id)).ToList();
var test2 = db.Queryable<Student, School>((st, sc) => st.SchoolId == sc.Id)
.Where(st =>
SqlFunc.IF(st.Id > 1)
.Return(st.Id)
.ElseIF(st.Id == 1)
.Return(st.SchoolId).End(st.Id) == 1).Select(st=>st).ToList();
var test3 = db.Queryable<DataTestInfo2>().Select(it => it.Bool1).ToSql();
var test4 = db.Queryable<DataTestInfo2>().Select(it => new { b=it.Bool1 }).ToSql();
DateTime? result = DateTime.Now;
var test5 = db.Queryable<Student>().Where(it=>it.CreateTime> result.Value.Date).ToList();
} }
public static void Page() public static void Page()
{ {
@ -245,8 +351,19 @@ namespace OrmTest.Demo
var list4 = db.Queryable<Student, School>((st, sc) => new object[] { var list4 = db.Queryable<Student, School>((st, sc) => new object[] {
JoinType.Left,st.SchoolId==sc.Id JoinType.Left,st.SchoolId==sc.Id
}) })
.Select((st, sc) => new { id=st.Id,school=sc }).ToList(); .Select((st, sc) => new { id = st.Id, school = sc }).ToList();
var list5 = db.Queryable<Student, School>((st, sc) => new object[] {
JoinType.Left,st.SchoolId==sc.Id
}).AS<Student>("STUDENT").AS<School>("SCHOOL")
.Select((st, sc) => new { id = st.Id, school = sc }).ToList();
var list6 = db.Queryable<Student, School>((st, sc) => new object[] {
JoinType.Left,st.SchoolId==sc.Id
}).With(SqlWith.NoLock).AS<Student>("STUDENT").AS<School>("SCHOOL")
.Select((st, sc) => new { id = st.Id, school = sc }).ToList();
} }
public static void Join() public static void Join()
{ {
@ -262,7 +379,7 @@ namespace OrmTest.Demo
JoinType.Left,st.SchoolId==sc.Id, JoinType.Left,st.SchoolId==sc.Id,
JoinType.Left,st.SchoolId==st2.Id JoinType.Left,st.SchoolId==st2.Id
}) })
.Where((st, sc, st2) => st2.Id == 1 || sc.Id == 1 || st.Id == 1).ToList(); .Where((st, sc, st2) => st2.Id == 1 || sc.Id == 1 || st.Id == 1).With(SqlWith.NoLock).ToList();
//join return List<ViewModelStudent> //join return List<ViewModelStudent>
var list3 = db.Queryable<Student, School>((st, sc) => new object[] { var list3 = db.Queryable<Student, School>((st, sc) => new object[] {
@ -285,25 +402,49 @@ namespace OrmTest.Demo
//The simple use of Join 2 table //The simple use of Join 2 table
var list5 = db.Queryable<Student, School>((st, sc) => st.SchoolId == sc.Id).Select((st,sc)=>new {st.Name,st.Id,schoolName=sc.Name}).ToList(); var list5 = db.Queryable<Student, School>((st, sc) => st.SchoolId == sc.Id).Select((st, sc) => new { st.Name, st.Id, schoolName = sc.Name }).ToList();
//join 3 table //join 3 table
var list6 = db.Queryable<Student, School,School>((st, sc,sc2) => st.SchoolId == sc.Id&&sc.Id==sc2.Id) var list6 = db.Queryable<Student, School, School>((st, sc, sc2) => st.SchoolId == sc.Id && sc.Id == sc2.Id)
.Select((st, sc,sc2) => new { st.Name, st.Id, schoolName = sc.Name,schoolName2=sc2.Name }).ToList(); .Select((st, sc, sc2) => new { st.Name, st.Id, schoolName = sc.Name, schoolName2 = sc2.Name }).ToList();
//join 3 table page //join 3 table page
var list7= db.Queryable<Student, School, School>((st, sc, sc2) => st.SchoolId == sc.Id && sc.Id == sc2.Id) var list7 = db.Queryable<Student, School, School>((st, sc, sc2) => st.SchoolId == sc.Id && sc.Id == sc2.Id)
.Select((st, sc, sc2) => new { st.Name, st.Id, schoolName = sc.Name, schoolName2 = sc2.Name }).ToPageList(1,2); .Select((st, sc, sc2) => new { st.Name, st.Id, schoolName = sc.Name, schoolName2 = sc2.Name }).ToPageList(1, 2);
//join 3 table page //join 3 table page
var list8 = db.Queryable<Student, School, School>((st, sc, sc2) => st.SchoolId == sc.Id && sc.Id == sc2.Id) var list8 = db.Queryable<Student, School, School>((st, sc, sc2) => st.SchoolId == sc.Id && sc.Id == sc2.Id)
.OrderBy(st=>st.Id) .OrderBy(st => st.Id)
.Select((st, sc, sc2) => new { st.Name, st.Id, schoolName = sc.Name, schoolName2 = sc2.Name }).ToPageList(1, 2); .Select((st, sc, sc2) => new { st.Name, st.Id, schoolName = sc.Name, schoolName2 = sc2.Name }).ToPageList(1, 2);
//In
var list9 = db.Queryable<Student>("it")
.OrderBy(it => it.Id)
.In(it => it.Id, db.Queryable<School>().Where("it.id=schoolId").Select(it => it.Id))
.ToList();
//SELECT [ID],[SchoolId],[Name],[CreateTime] FROM [STudent] it WHERE [ID]
//IN (SELECT [Id] FROM [School] WHERE it.id=schoolId ) ORDER BY [ID] ASC
var list10 = db.Queryable<Student, School>((st, sc) => st.SchoolId == sc.Id)
.In(st => st.Name, db.Queryable<School>("sc2").Where("id=st.schoolid").Select(it => it.Name))
.OrderBy(st => st.Id)
.Select(st => st)
.ToList();
//SELECT st.* FROM [STudent] st ,[School] sc WHERE ( [st].[SchoolId] = [sc].[Id] ) AND [st].[Name]
//IN (SELECT [Name] FROM [School] sc2 WHERE id=st.schoolid ) ORDER BY [st].[ID] ASC
var list11 = db.Queryable<Student, School>((st, sc) => st.SchoolId == sc.Id)
.In(st => st.Name, db.Queryable<School>("sc2").Where(it => it.Id == 1).Where("id=st.schoolid").Select(it => it.Name))
.OrderBy(st => st.Id)
.Select(st => st)
.ToList();
} }
public static void Funs() public static void Funs()
{ {
var db = GetInstance(); var db = GetInstance();
var t1 = db.Queryable<Student>().Where(it => SqlFunc.ToLower(it.Name) == SqlFunc.ToLower("JACK")).ToList(); var t1 = db.Queryable<Student>().Where(it => SqlFunc.ToLower(it.Name) == SqlFunc.ToLower("JACK")).ToList();
var t2 = db.Queryable<Student>().Where(it => SqlFunc.IsNull(it.Name,"nullvalue")=="nullvalue").ToList();
var t3 = db.Queryable<Student>().Where(it => SqlFunc.MergeString("a",it.Name) == "nullvalue").ToList();
//SELECT [Id],[SchoolId],[Name],[CreateTime] FROM [Student] WHERE ((LOWER([Name])) = (LOWER(@MethodConst0)) ) //SELECT [Id],[SchoolId],[Name],[CreateTime] FROM [Student] WHERE ((LOWER([Name])) = (LOWER(@MethodConst0)) )
/***More Functions***/ /***More Functions***/
@ -343,10 +484,11 @@ namespace OrmTest.Demo
{ {
var db = GetInstance(); var db = GetInstance();
db.IgnoreColumns.Add("TestId", "Student"); db.IgnoreColumns.Add("TestId", "Student");
var s1 = db.Queryable<Student>().Select(it => new ViewModelStudent2 { Name = it.Name, Student = it }).ToList(); var s1 = db.Queryable<Student>().Where(it => it.Id == 136915).Single();
var s2 = db.Queryable<Student>().Select(it => new { id = it.Id, w = new { x = it } }).ToList(); var s2 = db.Queryable<Student>().Select(it => new { id = it.Id, w = new { x = it } }).ToList();
var s3 = db.Queryable<Student>().Select(it => new { newid = it.Id }).ToList(); var s3 = db.Queryable<Student>().Select(it => new { newid = it.Id }).ToList();
var s4 = db.Queryable<Student>().Select(it => new { newid = it.Id, obj = it }).ToList(); var s4 = db.Queryable<Student>().Select(it => new { newid = it.Id, obj = it }).ToList();
var s41 = db.Queryable<Student>().Select<dynamic>("*").ToList();
var s5 = db.Queryable<Student>().Select(it => new ViewModelStudent2 { Student = it, Name = it.Name }).ToList(); var s5 = db.Queryable<Student>().Select(it => new ViewModelStudent2 { Student = it, Name = it.Name }).ToList();
var s6 = db.Queryable<Student, School>((st, sc) => new object[] { var s6 = db.Queryable<Student, School>((st, sc) => new object[] {
JoinType.Left,st.SchoolId==sc.Id JoinType.Left,st.SchoolId==sc.Id
@ -366,6 +508,9 @@ namespace OrmTest.Demo
.OrderBy((st, sc) => st.SchoolId) .OrderBy((st, sc) => st.SchoolId)
.Select((st, sc) => sc) .Select((st, sc) => sc)
.Take(1).ToList(); .Take(1).ToList();
var s9 = db.Queryable<Student>().Select(it=>new Student() { Id=it.Id, TestId=1, Name=it.Name, CreateTime=it.CreateTime }).First();
var s10 = db.Queryable<Student>().Select(it => new Student() { Id = it.Id}).First();
} }
private static void Sqlable() private static void Sqlable()
{ {

View File

@ -24,7 +24,7 @@ namespace OrmTest.Demo
//Only update Name //Only update Name
var t3 = db.Updateable(updateObj).UpdateColumns(it => new { it.Name }).ExecuteCommand(); var t3 = db.Updateable(updateObj).UpdateColumns(it => new { it.Name }).ExecuteCommand();
var t3_1 = db.Updateable(updateObj).UpdateColumns(it => it=="Name").ExecuteCommand(); var t3_1 = db.Updateable(updateObj).UpdateColumns(it => it == "Name").ExecuteCommand();
//Ignore Name and TestId //Ignore Name and TestId
@ -58,6 +58,16 @@ namespace OrmTest.Demo
//Column is null no update //Column is null no update
db.Updateable(updateObj).Where(true).ExecuteCommand(); db.Updateable(updateObj).Where(true).ExecuteCommand();
var t12 = db.Updateable<School>().AS("Student").UpdateColumns(it => new School() { Name = "jack" }).Where(it => it.Id == 1).ExecuteCommandAsync();
t12.Wait();
//update one columns
var count = db.Updateable<Student>().UpdateColumns(it => it.SchoolId == 1).Where(it => it.Id == 1).ExecuteCommand();
} }
} }
} }

View File

@ -55,6 +55,10 @@ namespace OrmTest.Demo
var t10 = db.Insertable(insertObjs.ToArray()).InsertColumns(it => new { it.Name }).ExecuteCommand(); var t10 = db.Insertable(insertObjs.ToArray()).InsertColumns(it => new { it.Name }).ExecuteCommand();
var t11 = db.Insertable(insertObjs.ToArray()).ExecuteCommand(); var t11 = db.Insertable(insertObjs.ToArray()).ExecuteCommand();
var t12 = db.Insertable(insertObj).IgnoreColumns(it => it == "Name" || it == "TestId").ExecuteReturnIdentityAsync();
t12.Wait();
} }
} }
} }

View File

@ -28,6 +28,9 @@ namespace OrmTest.Demo
//by expression id>1 and id==1 //by expression id>1 and id==1
var t5 = db.Deleteable<Student>().Where(it => it.Id > 1).Where(it => it.Id == 1).ExecuteCommand(); var t5 = db.Deleteable<Student>().Where(it => it.Id > 1).Where(it => it.Id == 1).ExecuteCommand();
var t6 = db.Deleteable<Student>().AS("student").Where(it => it.Id > 1).Where(it => it.Id == 1).ExecuteCommandAsync();
t6.Wait();
} }
} }
} }

View File

@ -22,8 +22,10 @@ namespace OrmTest.Demo
public DateTime? DateTime { get; set; } public DateTime? DateTime { get; set; }
[SugarColumn(IsNullable = true,OldColumnName = "Dob")] [SugarColumn(IsNullable = true,OldColumnName = "Dob")]
public double? Dob2 { get; set; } public double? Dob2 { get; set; }
[SugarColumn(Length =110)] [SugarColumn(Length =11000)]
public string A1 { get; set; } public string A1 { get; set; }
[SugarColumn(Length = 18,DecimalDigits=2)]
public decimal Dec { get; set; }
} }
public class CodeTable2 { public class CodeTable2 {
public int Id { get; set; } public int Id { get; set; }

View File

@ -1,5 +1,6 @@
using OrmTest.Demo; using OrmTest.Demo;
using OrmTest.Models; using OrmTest.Models;
using SqlSugar;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
@ -16,8 +17,47 @@ namespace OrmTest.Demo
{ {
Where(); Where();
OrderBy(); OrderBy();
SelectMerge();
ConditionalModel();
JoinExp();
} }
private static void JoinExp()
{
var db = GetInstance();
var exp= Expressionable.Create<Student>()
.OrIF(1==1,it => it.Id == 11)
.And(it=>it.Id==1)
.AndIF(2==2,it => it.Id == 1)
.Or(it =>it.Name == "a1").ToExpression();
var list=db.Queryable<Student>().Where(exp).ToList();
}
private static void ConditionalModel()
{
var db = GetInstance();
List<ConditionalModel> conModels = new List<ConditionalModel>();
conModels.Add(new ConditionalModel() { FieldName = "id", ConditionalType = ConditionalType.Equal, FieldValue = "1" });
conModels.Add(new ConditionalModel() { FieldName = "id", ConditionalType = ConditionalType.Like, FieldValue = "1" });
conModels.Add(new ConditionalModel() { FieldName = "id", ConditionalType = ConditionalType.IsNullOrEmpty });
conModels.Add(new ConditionalModel() { FieldName = "id", ConditionalType = ConditionalType.In,FieldValue="1,2,3" });
conModels.Add(new ConditionalModel() { FieldName = "id", ConditionalType = ConditionalType.NotIn, FieldValue = "1,2,3" });
conModels.Add(new ConditionalModel() { FieldName = "id", ConditionalType = ConditionalType.NoEqual, FieldValue = "1,2,3" });
var student = db.Queryable<Student>().Where(conModels).ToList();
}
private static void SelectMerge()
{
var db = GetInstance();
//page join
var pageJoin = db.Queryable<Student, School>((st, sc) => new object[] {
JoinType.Left,st.SchoolId==sc.Id
})
.Select((st, sc) => new { id = st.Id, name = sc.Name })
.MergeTable().Where(XXX => XXX.id == 1).OrderBy("name asc").ToList();// Prefix, is, not, necessary, and take the columns in select
}
private static void Where() private static void Where()
{ {
var db = GetInstance(); var db = GetInstance();
@ -32,14 +72,14 @@ namespace OrmTest.Demo
var db = GetInstance(); var db = GetInstance();
//propertyName is valid //propertyName is valid
string propertyName = "Id"; string propertyName = "Id";
string dbColumnName = db.EntityProvider.GetDbColumnName<Student>(propertyName); string dbColumnName = db.EntityMaintenance.GetDbColumnName<Student>(propertyName);
var list = db.Queryable<Student>().OrderBy(dbColumnName).ToList(); var list = db.Queryable<Student>().OrderBy(dbColumnName).ToList();
//propertyName is invalid //propertyName is invalid
try try
{ {
propertyName = "Id'"; propertyName = "Id'";
dbColumnName = db.EntityProvider.GetDbColumnName<Student>(propertyName); dbColumnName = db.EntityMaintenance.GetDbColumnName<Student>(propertyName);
var list2 = db.Queryable<Student>().OrderBy(dbColumnName).ToList(); var list2 = db.Queryable<Student>().OrderBy(dbColumnName).ToList();
} }
catch (Exception ex) catch (Exception ex)

View File

@ -0,0 +1,46 @@
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace OrmTest.Demo
{
public class Aop
{
public static void Init()
{
SqlSugarClient db = new SqlSugarClient(new ConnectionConfig() { ConnectionString = Config.ConnectionString, DbType = DbType.SqlServer, IsAutoCloseConnection = true });
db.Aop.OnLogExecuted = (sql, pars) =>
{
};
db.Aop.OnLogExecuting = (sql, pars) =>
{
};
db.Aop.OnError = (exp) =>
{
};
db.Aop.OnExecutingChangeSql = (sql, pars) =>
{
return new KeyValuePair<string, SugarParameter[]>(sql,pars);
};
db.Queryable<CMStudent>().ToList();
try
{
db.Queryable<CMStudent>().AS(" ' ").ToList();
}
catch (Exception)
{
}
}
}
}

View File

@ -0,0 +1,33 @@
using OrmTest.Models;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace OrmTest.Demo
{
public class D_QueryableViewn : DemoBase
{
public static void Init()
{
var db = GetInstance();
var q1 = db.Queryable<Student, School>((st,sc)=>new object[] {
JoinType.Left,st.SchoolId==sc.Id
}).Select((st, sc) => new ViewModelStudent4() { Id=st.Id, Name=st.Name,SchoolName=sc.Name });
var q2 = db.Queryable<School>();
var innerJoinList = db.Queryable(q1, q2, (j1, j2) => j1.Id == j2.Id).Select((j1, j2) => j1).ToList();//inner join
var leftJoinList = db.Queryable(q1, q2,JoinType.Left, (j1, j2) => j1.Id == j2.Id).Select((j1, j2) => j1).ToList();//left join
}
}
public class ViewModelStudent4 {
public int Id { get; set; }
public string SchoolName { get; set; }
public string Name { get; set; }
}
}

View File

@ -14,7 +14,7 @@ namespace OrmTest.Demo
db.Ado.IsEnableLogEvent = true; db.Ado.IsEnableLogEvent = true;
db.Ado.LogEventStarting = (sql, pars) => db.Ado.LogEventStarting = (sql, pars) =>
{ {
Console.WriteLine(sql + "\r\n" + db.Utilities.SerializeObject(pars.ToDictionary(s => s.ParameterName, s => s.Value))); Console.WriteLine(sql + "\r\n" + db.Utilities.SerializeObject(pars.ToDictionary(it => it.ParameterName, it => it.Value)));
Console.WriteLine(); Console.WriteLine();
}; };
return db; return db;

View File

@ -1,9 +1,17 @@
using OrmTest; using System;
using OrmTest.PerformanceTesting; using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using System.Linq.Expressions;
using SqlSugar;
using OrmTest.Models;
using System.Data.SqlClient;
using OrmTest.UnitTest; using OrmTest.UnitTest;
using System; using OrmTest.PerformanceTesting;
namespace SqlSeverTest namespace OrmTest
{ {
class Program class Program
{ {
@ -37,9 +45,11 @@ namespace SqlSeverTest
OrmTest.Demo.Filter.Init(); OrmTest.Demo.Filter.Init();
OrmTest.Demo.ComplexModel.Init(); OrmTest.Demo.ComplexModel.Init();
OrmTest.Demo.CodeFirst.Init(); OrmTest.Demo.CodeFirst.Init();
OrmTest.Demo.Aop.Init();
OrmTest.Demo.MasterSlave.Init(); OrmTest.Demo.MasterSlave.Init();
OrmTest.Demo.SharedConnection.Init(); OrmTest.Demo.SharedConnection.Init();
OrmTest.Demo.ExtSqlFun.Init(); OrmTest.Demo.ExtSqlFun.Init();
OrmTest.Demo.D_QueryableViewn.Init();
} }
} }
} }

View File

@ -56,6 +56,20 @@ namespace OrmTest
base.Check(@"DELETE FROM [STudent] WHERE id=@id", new List<SugarParameter>() { base.Check(@"DELETE FROM [STudent] WHERE id=@id", new List<SugarParameter>() {
new SugarParameter("@id",1) new SugarParameter("@id",1)
}, t6.Key, t6.Value, "Delte t6 error"); }, t6.Key, t6.Value, "Delte t6 error");
var t7 = base.GetInstanceByAttribute().Deleteable<DeleteTestTable>().Where(new List<DeleteTestTable>() {
new DeleteTestTable() { Id=1, Id2="x" },
new DeleteTestTable() { Id=2, Id2="x1" }
}).ToSql();
base.Check("DELETE FROM [DeleteTestTable] WHERE (([Id]=N'1'AND [Id2]=N'x')OR ([Id]=N'2'AND [Id2]=N'x1')) ",null, t7.Key, null,
"Delte t7 error");
} }
} }
public class DeleteTestTable {
[SugarColumn(IsPrimaryKey =true)]
public int Id { get; set; }
[SugarColumn(IsPrimaryKey = true)]
public string Id2 { get; set; }
}
} }

View File

@ -20,7 +20,7 @@ namespace OrmTest.UnitTest
var db = GetInstance(); var db = GetInstance();
var shoolValue = SchoolEnum.HarvardUniversity; var shoolValue = SchoolEnum.HarvardUniversity;
var enums = new SchoolEnum[] { shoolValue, SchoolEnum.UniversityOfOxford }; var enums = new SchoolEnum[] { shoolValue, SchoolEnum.UniversityOfOxford };
var list = db.Queryable<StudentEnum>().AS("student").Where(it => it.SchoolId == shoolValue).ToList(); var list = db.Queryable<StudentEnum>().AS("student").Where(it => it.SchoolId == shoolValue).Select(it=>it.SchoolId).ToList();
var x = new StudentEnum() var x = new StudentEnum()
{ {

View File

@ -74,10 +74,25 @@ namespace OrmTest.UnitTest
Replace(); Replace();
Length(); Length();
Time(); Time();
Test1();
} }
base.End("Method Test"); base.End("Method Test");
} }
private void Test1()
{
var ids = new int[] { 1, 2, 3 };
Expression<Func<Student, bool>> exp = it => ids.Contains(it.Id)&&!SqlFunc.IsNullOrEmpty(it.Name);
SqlServerExpressionContext expContext = new SqlServerExpressionContext();
expContext.Resolve(exp, ResolveExpressType.WhereSingle);
var value = expContext.Result.GetString();
var pars = expContext.Parameters;
base.Check(value, pars, "(([Id] IN ('1','2','3')) AND NOT( [Name]='' OR [Name] IS NULL ))", new List<SugarParameter>() {
}, "Test1 error");
}
private void ExtendToString() private void ExtendToString()
{ {
Expression<Func<Student, bool>> exp = it => it.Id.ToString() == "a"; Expression<Func<Student, bool>> exp = it => it.Id.ToString() == "a";

View File

@ -26,6 +26,9 @@ namespace OrmTest.UnitTest
single3(); single3();
single4(); single4();
single5(); single5();
single6();
single7();
single8();
Multiple(); Multiple();
Multiple2(); Multiple2();
singleDynamic(); singleDynamic();
@ -34,6 +37,44 @@ namespace OrmTest.UnitTest
base.End("Select Test"); base.End("Select Test");
} }
private void single7()
{
Expression<Func<DataTestInfo2, DataTestInfo2>> exp =it => new DataTestInfo2() { Bool1=it.Bool1 , Bool2=it.Bool2 };
ExpressionContext expContext = new ExpressionContext();
expContext.IsSingle = false;
expContext.Resolve(exp, ResolveExpressType.SelectSingle);
var selectorValue = expContext.Result.GetString();
var pars = expContext.Parameters;
base.Check(
selectorValue,
pars,
@"[Bool1] AS [Bool1] , [Bool2] AS [Bool2] ",
new List<SugarParameter>()
{
},
"Select.single7 Error");
}
private void single8()
{
Expression<Func<DataTestInfo2, object>> exp = it => new { Bool1 = it.Bool1, Bool2 = it.Bool2 };
ExpressionContext expContext = new ExpressionContext();
expContext.IsSingle = false;
expContext.Resolve(exp, ResolveExpressType.SelectSingle);
var selectorValue = expContext.Result.GetString();
var pars = expContext.Parameters;
base.Check(
selectorValue,
pars,
@"[Bool1] AS [Bool1] , [Bool2] AS [Bool2] ",
new List<SugarParameter>()
{
},
"Select.single8 Error");
}
private void Multiple() private void Multiple()
{ {
Expression<Func<Student, School, object>> exp = (it, school) => new Student() { Name = "a", Id = it.Id, SchoolId = school.Id, TestId = it.Id + 1 }; Expression<Func<Student, School, object>> exp = (it, school) => new Student() { Name = "a", Id = it.Id, SchoolId = school.Id, TestId = it.Id + 1 };
@ -161,7 +202,22 @@ namespace OrmTest.UnitTest
@"( @constant0<>'' AND @constant0 IS NOT NULL )", new List<SugarParameter>() { @"( @constant0<>'' AND @constant0 IS NOT NULL )", new List<SugarParameter>() {
new SugarParameter("@constant0",p) new SugarParameter("@constant0",p)
}, selectorValue, pars, }, selectorValue, pars,
"Select.single4 Error"); "Select.single5 Error");
}
private void single6()
{
var p = (DateTime?)DateTime.Now;
Expression<Func<Student, object>> exp = it => p.Value;
SqlServerExpressionContext expContext = new SqlServerExpressionContext();
expContext.IsSingle = false;
expContext.Resolve(exp, ResolveExpressType.FieldSingle);
var selectorValue = expContext.Result.GetString();
var pars = expContext.Parameters;
base.Check(
@" @Const0 ", new List<SugarParameter>() {
new SugarParameter("@Const0",p)
}, selectorValue, pars,
"Select.single6 Error");
} }
private void singleDynamic() private void singleDynamic()

View File

@ -21,7 +21,12 @@ namespace OrmTest.UnitTest
base.Begin(); base.Begin();
for (int i = 0; i < base.Count; i++) for (int i = 0; i < base.Count; i++)
{ {
whereSingle29("22");
whereSingle28();
whereSingle27();
whereSingle26();
whereSingle25();
whereSingle24();
whereSingle23(); whereSingle23();
whereSingle22(); whereSingle22();
whereSingle21(); whereSingle21();
@ -52,6 +57,45 @@ namespace OrmTest.UnitTest
} }
base.End("Where Test"); base.End("Where Test");
} }
public string Get28(string a) {
return a + "1";
}
private void whereSingle29(string p2)
{
Expression<Func<Student, bool>> exp = it => Get28("22") == p2;
ExpressionContext expContext = new ExpressionContext();
expContext.Resolve(exp, ResolveExpressType.WhereMultiple);
var value = expContext.Result.GetString();
var pars = expContext.Parameters;
base.Check(value, pars, " (@constant0 = @Const1 )", new List<SugarParameter>() {
new SugarParameter("@constant0","221"),
new SugarParameter("@Const1","22")
}, "whereSingle28");
}
private void whereSingle28()
{
Expression<Func<Student, bool>> exp = it => Get28("22")=="22";
ExpressionContext expContext = new ExpressionContext();
expContext.Resolve(exp, ResolveExpressType.WhereMultiple);
var value = expContext.Result.GetString();
var pars = expContext.Parameters;
base.Check(value, pars, " (@constant0 = @Const1 )", new List<SugarParameter>() {
new SugarParameter("@constant0","221"),
new SugarParameter("@Const1","22")
}, "whereSingle28");
}
private void whereSingle27() {
var schoolData = new School() { Id = 100, Name = "x" };
Expression<Func<Student, bool>> exp = it => it.Name.Contains(schoolData.Name);
ExpressionContext expContext = new ExpressionContext();
expContext.Resolve(exp, ResolveExpressType.WhereMultiple);
var value = expContext.Result.GetString();
var pars = expContext.Parameters;
base.Check(value, pars, " ([it].[Name] like '%'+@MethodConst0+'%') ", new List<SugarParameter>() {
new SugarParameter("@MethodConst0","x")
}, "whereSingle27");
}
private void WhereMultiple1() private void WhereMultiple1()
{ {
Expression<Func<Student, bool>> exp = it => it.Id > 1; Expression<Func<Student, bool>> exp = it => it.Id > 1;
@ -378,6 +422,46 @@ namespace OrmTest.UnitTest
new SugarParameter("@Const0",val) new SugarParameter("@Const0",val)
}, "whereSingle23"); }, "whereSingle23");
} }
private void whereSingle24()
{
Expression<Func<DataTestInfo, bool>> exp = it => it.Datetime1 > DateTime.Now.Date;
SqlServerExpressionContext expContext = new SqlServerExpressionContext();
expContext.Resolve(exp, ResolveExpressType.WhereSingle);
var value = expContext.Result.GetString();
var pars = expContext.Parameters;
base.Check(value, pars, "( [Datetime1] > @Datetime10 )", new List<SugarParameter>()
{
new SugarParameter("@Datetime10",DateTime.Now.Date)
}, "whereSingle24");
}
private void whereSingle26()
{
var p = DateTime.Now;
Expression<Func<DataTestInfo2, bool>> exp = it => it.Bool1&&it.Bool1;
SqlServerExpressionContext expContext = new SqlServerExpressionContext();
expContext.Resolve(exp, ResolveExpressType.WhereSingle);
var value = expContext.Result.GetString();
var pars = expContext.Parameters;
base.Check(value, pars, "( ( [Bool1]=1 ) AND ( [Bool1]=1 ) )", new List<SugarParameter>()
{
}, "whereSingle26");
}
private void whereSingle25()
{
var p = DateTime.Now;
Expression<Func<DataTestInfo, bool>> exp = it => it.Datetime1.Date > p.Date;
SqlServerExpressionContext expContext = new SqlServerExpressionContext();
expContext.Resolve(exp, ResolveExpressType.WhereSingle);
var value = expContext.Result.GetString();
var pars = expContext.Parameters;
base.Check(value, pars, "( CAST( DateName(Year,[Datetime1]) +'-'+ DateName(Month,[Datetime1]) +'-'+ DateName(Day,[Datetime1]) AS DATETIME) > @Date0 )", new List<SugarParameter>()
{
new SugarParameter("@Date0",DateTime.Now.Date),
}, "whereSingle25");
}
} }
public class WhereConst public class WhereConst

View File

@ -37,7 +37,7 @@ namespace OrmTest.UnitTest
//Insert reutrn Command Count //Insert reutrn Command Count
var t2 = db.Insertable(insertObj).ExecuteCommand(); var t2 = db.Insertable(insertObj).ExecuteReturnEntity();
db.IgnoreColumns = null; db.IgnoreColumns = null;
//Only insert Name //Only insert Name

View File

@ -60,7 +60,7 @@ namespace OrmTest.UnitTest
db.Ado.IsEnableLogEvent = true; db.Ado.IsEnableLogEvent = true;
db.Ado.LogEventStarting = (sql, pars) => db.Ado.LogEventStarting = (sql, pars) =>
{ {
Console.WriteLine(sql + "\r\n" + db.RewritableMethods.SerializeObject(pars)); Console.WriteLine(sql + "\r\n" + db.Utilities.SerializeObject(pars));
Console.WriteLine(); Console.WriteLine();
}; };
return db; return db;

View File

@ -91,7 +91,21 @@ namespace OrmTest.UnitTest
var t4 = db.Queryable<Student, School, School>((st, sc, sc2) => new object[] { var t4 = db.Queryable<Student, School, School>((st, sc, sc2) => new object[] {
JoinType.Left,st.SchoolId==sc.Id, JoinType.Left,st.SchoolId==sc.Id,
JoinType.Left,sc2.Id==sc.Id JoinType.Left,sc2.Id==sc.Id
}).GroupBy(st => st.Id).Select(st=>st.Id).Count(); }).GroupBy(st => st.Id).Select(st => st.Id).Count();
DateTime? result = DateTime.Now;
var t5 = db.Queryable<Student>().Where(it => it.CreateTime > result.Value.Date).ToSql();
base.Check("SELECT [ID],[SchoolId],[Name],[CreateTime] FROM [STudent] WHERE ( [CreateTime] > @Const0 )",
new List<SugarParameter>() {
new SugarParameter("@Const0",result.Value.Date)
}, t5.Key, t5.Value, "select t5 Error");
db.Ado.IsEnableLogEvent = false;
var t6 = db.Queryable<DataTestInfo2>().Where(it => SqlFunc.HasValue(it.Bool2) == false).ToSql();
base.Check("SELECT [PK],[Bool1],[Bool2],[Text1] FROM [DataTestInfo2] WHERE (( CASE WHEN ( [Bool2]<>'' AND [Bool2] IS NOT NULL ) THEN 1 ELSE 0 END ) = @Const0 )",
new List<SugarParameter>() {
new SugarParameter("@Const0",false)
}, t6.Key, t6.Value, "select t6 Error");
#endregion #endregion

View File

@ -116,6 +116,22 @@ namespace OrmTest.UnitTest
var t12 = db.Queryable<Student>().Where(it=>it.Id!=null).ToSql(); var t12 = db.Queryable<Student>().Where(it=>it.Id!=null).ToSql();
base.Check("SELECT [ID],[SchoolId],[Name],[CreateTime] FROM [STudent] WHERE ( [ID] IS NOT NULL )", null, t12.Key, t12.Value, "single t12 error"); base.Check("SELECT [ID],[SchoolId],[Name],[CreateTime] FROM [STudent] WHERE ( [ID] IS NOT NULL )", null, t12.Key, t12.Value, "single t12 error");
var id = 1;
var t13 = db.Queryable<Student>().Where(it => SqlFunc.Subqueryable<School>().Where(s => s.Id == it.Id&&s.Id==id).Max(s => s.Id) == 1).ToSql();
base.Check("SELECT [ID],[SchoolId],[Name],[CreateTime] FROM [STudent] it WHERE ((SELECT MAX([Id]) FROM [School] WHERE (( [Id] = [it].[ID] ) AND ( [Id] = @Id0 ))) = @Const1 )",
new List<SugarParameter>() {
new SugarParameter("@Id0",1),
new SugarParameter("@Const1",1)
}, t13.Key, t13.Value, "single t13 error ");
var t14 = db.Queryable<Student>()
.Where(it => it.Name == "a" && SqlFunc.HasValue(it.Name)).ToSql();
base.Check("SELECT [ID],[SchoolId],[Name],[CreateTime] FROM [STudent] WHERE (( [Name] = @Name0 ) AND ( [Name]<>'' AND [Name] IS NOT NULL ))",
new List<SugarParameter>() {
new SugarParameter("@Name0","a")
}, t14.Key, t14.Value, "single t14 error ");
} }
} }
} }

View File

@ -51,5 +51,11 @@ namespace OrmTest.UnitTest
SqlSugarClient db = new SqlSugarClient(new ConnectionConfig() { ConnectionString = Config.ConnectionString, DbType = DbType.SqlServer, IsAutoCloseConnection = true }); SqlSugarClient db = new SqlSugarClient(new ConnectionConfig() { ConnectionString = Config.ConnectionString, DbType = DbType.SqlServer, IsAutoCloseConnection = true });
return db; return db;
} }
public SqlSugarClient GetInstanceByAttribute()
{
SqlSugarClient db = new SqlSugarClient(new ConnectionConfig() { InitKeyType=InitKeyType.Attribute, ConnectionString = Config.ConnectionString, DbType = DbType.SqlServer, IsAutoCloseConnection = true });
return db;
}
} }
} }

View File

@ -151,14 +151,37 @@ namespace OrmTest.UnitTest
[Name]=@Name WHERE [Id]=@Id", new List<SugarParameter>() { [Name]=@Name WHERE [Id]=@Id", new List<SugarParameter>() {
new SugarParameter("@Name","a"), new SugarParameter("@Name","a"),
new SugarParameter("@ID",1) new SugarParameter("@ID",1)
}, t13.Key, t13.Value, "Insert t13 error"); }, t13.Key, t13.Value, "Update t13 error");
var t14 = db.Updateable<Student>(new Dictionary<string, object>() { { "id", 0 }, { "name", "2" } }).ToSql(); var t14 = db.Updateable<Student>(new Dictionary<string, object>() { { "id", 0 }, { "name", "2" } }).ToSql();
base.Check(@"UPDATE [STudent] SET base.Check(@"UPDATE [STudent] SET
[Name]=@Name WHERE [Id]=@Id", new List<SugarParameter>() { [Name]=@Name WHERE [Id]=@Id", new List<SugarParameter>() {
new SugarParameter("@Name", "2"), new SugarParameter("@Name", "2"),
new SugarParameter("@ID", 0) new SugarParameter("@ID", 0)
}, t14.Key, t14.Value, "Insert t14 error"); }, t14.Key, t14.Value, "Update t14 error");
// var t15 = db.Updateable(new StudentTest() { Id = 1, Name = "1" }).AS("student").ToSql();
// base.Check(@"UPDATE [student] SET
//[SchoolId]=@SchoolId,[Name]=@Name,[CreateTime]=@CreateTime WHERE [Id]=@Id", null, t15.Key, null, "Update t15 error");
var t16= db.Updateable<Student>().UpdateColumns(it => new Student()
{
SchoolId = SqlFunc.Subqueryable<School>().Where(s => s.Id == it.SchoolId).Select(s => s.Id),
Name = "newname"
}).Where(it => it.Id == 1).ToSql();
var t17 = db.Updateable<Student>().UpdateColumns(it => new Student()
{
SchoolId = SqlFunc.Subqueryable<School>().Where(s => s.Id == it.SchoolId).Select(s => s.Id),
Name = "newname"
}).Where(it => it.Id == 1).ToSql();
base.Check(@"UPDATE [STudent] SET
[SchoolId] = (SELECT TOP 1 [Id] FROM [School] WHERE ( [Id] =[STudent].[SchoolId] )) , [Name] = @Const0 WHERE ( [ID] = @Id1 )", new List<SugarParameter>() {
new SugarParameter("@Const0","newname"),
new SugarParameter("@Id1","1")
}, t17.Key, t17.Value, "Update t17 error");
} }
} }

View File

@ -472,7 +472,7 @@ namespace SqlSugar
if (parameters != null && parameters.Any()) if (parameters != null && parameters.Any())
builder.SqlQueryBuilder.Parameters.AddRange(parameters); builder.SqlQueryBuilder.Parameters.AddRange(parameters);
var dataReader = this.GetDataReader(builder.SqlQueryBuilder.ToSqlString(), builder.SqlQueryBuilder.Parameters.ToArray()); var dataReader = this.GetDataReader(builder.SqlQueryBuilder.ToSqlString(), builder.SqlQueryBuilder.Parameters.ToArray());
List<T> result = this.DbBind.DataReaderToList<T>(typeof(T), dataReader, builder.SqlQueryBuilder.Fields); List<T> result = this.DbBind.DataReaderToList<T>(typeof(T), dataReader);
builder.SqlQueryBuilder.Clear(); builder.SqlQueryBuilder.Clear();
if (this.Context.Ado.DataReaderParameters != null) if (this.Context.Ado.DataReaderParameters != null)
{ {

View File

@ -7,13 +7,14 @@ namespace SqlSugar
{ {
public partial class DbBindAccessory public partial class DbBindAccessory
{ {
protected List<T> GetEntityList<T>(SqlSugarClient context, IDataReader dataReader, string fields) protected List<T> GetEntityList<T>(SqlSugarClient context, IDataReader dataReader)
{ {
Type type = typeof(T); Type type = typeof(T);
string key = "DataReaderToList." + fields+ dataReader.FieldCount+ context.CurrentConnectionConfig.DbType + type.FullName; var fieldNames = GetDataReaderNames(dataReader);
IDataReaderEntityBuilder<T> entytyList = context.Utilities.GetReflectionInoCacheInstance().GetOrCreate(key, () => string cacheKey = GetCacheKey(type,fieldNames);
IDataReaderEntityBuilder<T> entytyList = context.Utilities.GetReflectionInoCacheInstance().GetOrCreate(cacheKey, () =>
{ {
var cacheResult = new IDataReaderEntityBuilder<T>(context, dataReader).CreateBuilder(type); var cacheResult = new IDataReaderEntityBuilder<T>(context, dataReader,fieldNames).CreateBuilder(type);
return cacheResult; return cacheResult;
}); });
List<T> result = new List<T>(); List<T> result = new List<T>();
@ -32,6 +33,29 @@ namespace SqlSugar
return result; return result;
} }
private string GetCacheKey(Type type,List<string> keys)
{
StringBuilder sb = new StringBuilder("DataReaderToList.");
sb.Append(type.FullName);
sb.Append(".");
foreach (var item in keys)
{
sb.Append(item);
}
return sb.ToString();
}
private List<string> GetDataReaderNames(IDataReader dataReader)
{
List<string> keys = new List<string>();
var count = dataReader.FieldCount;
for (int i = 0; i < count; i++)
{
keys.Add(dataReader.GetName(i));
}
return keys;
}
protected List<T> GetKeyValueList<T>(Type type, IDataReader dataReader) protected List<T> GetKeyValueList<T>(Type type, IDataReader dataReader)
{ {
List<T> reval = new List<T>(); List<T> reval = new List<T>();
@ -125,7 +149,7 @@ namespace SqlSugar
} }
else if (type.IsEnum) else if (type.IsEnum)
{ {
reval.Add((T)Enum.Parse(type,value.ObjToString())); reval.Add((T)Enum.Parse(type, value.ObjToString()));
} }
else else
{ {

View File

@ -175,7 +175,7 @@ namespace SqlSugar
return propertyTypes.First().Value.ToString(); return propertyTypes.First().Value.ToString();
} }
} }
public virtual List<T> DataReaderToList<T>(Type type, IDataReader dataReader, string fields) public virtual List<T> DataReaderToList<T>(Type type, IDataReader dataReader)
{ {
using (dataReader) using (dataReader)
{ {
@ -193,7 +193,7 @@ namespace SqlSugar
} }
else else
{ {
return GetEntityList<T>(Context, dataReader, fields); return GetEntityList<T>(Context, dataReader);
} }
} }
} }

View File

@ -74,12 +74,12 @@ namespace SqlSugar
} }
public IDataReaderEntityBuilder(SqlSugarClient context, IDataRecord dataRecord) public IDataReaderEntityBuilder(SqlSugarClient context, IDataRecord dataRecord,List<string> fieldNames)
{ {
this.Context = context; this.Context = context;
this.DataRecord = dataRecord; this.DataRecord = dataRecord;
this.DynamicBuilder = new IDataReaderEntityBuilder<T>(); this.DynamicBuilder = new IDataReaderEntityBuilder<T>();
this.ReaderKeys = new List<string>(); this.ReaderKeys = fieldNames;
} }
#endregion #endregion
@ -91,10 +91,6 @@ namespace SqlSugar
public IDataReaderEntityBuilder<T> CreateBuilder(Type type) public IDataReaderEntityBuilder<T> CreateBuilder(Type type)
{ {
for (int i = 0; i < this.DataRecord.FieldCount; i++)
{
this.ReaderKeys.Add(this.DataRecord.GetName(i));
}
DynamicMethod method = new DynamicMethod("SqlSugarEntity", type, DynamicMethod method = new DynamicMethod("SqlSugarEntity", type,
new Type[] { typeof(IDataRecord) }, type, true); new Type[] { typeof(IDataRecord) }, type, true);
ILGenerator generator = method.GetILGenerator(); ILGenerator generator = method.GetILGenerator();
@ -121,14 +117,13 @@ namespace SqlSugar
} }
} }
} }
if (Context.IgnoreColumns != null && Context.IgnoreColumns.Any(it => it.PropertyName.Equals(propertyInfo.Name, StringComparison.CurrentCultureIgnoreCase) if (IsIgnore(type, propertyInfo)&&!this.ReaderKeys.Any(it=>it==fileName))
&& it.EntityName.Equals(type.Name, StringComparison.CurrentCultureIgnoreCase)))
{ {
continue; continue;
} }
if (propertyInfo != null && propertyInfo.GetSetMethod() != null) if (propertyInfo != null && propertyInfo.GetSetMethod() != null)
{ {
if (propertyInfo.PropertyType.IsClass() && propertyInfo.PropertyType != UtilConstants.ByteArrayType&&propertyInfo.PropertyType!=UtilConstants.ObjType) if (propertyInfo.PropertyType.IsClass() && propertyInfo.PropertyType != UtilConstants.ByteArrayType && propertyInfo.PropertyType != UtilConstants.ObjType)
{ {
BindClass(generator, result, propertyInfo); BindClass(generator, result, propertyInfo);
} }
@ -146,9 +141,15 @@ namespace SqlSugar
DynamicBuilder.handler = (Load)method.CreateDelegate(typeof(Load)); DynamicBuilder.handler = (Load)method.CreateDelegate(typeof(Load));
return DynamicBuilder; return DynamicBuilder;
} }
#endregion #endregion
#region Private methods #region Private methods
private bool IsIgnore(Type type, PropertyInfo propertyInfo)
{
return Context.IgnoreColumns != null && Context.IgnoreColumns.Any(it => it.PropertyName.Equals(propertyInfo.Name, StringComparison.CurrentCultureIgnoreCase)
&& it.EntityName.Equals(type.Name, StringComparison.CurrentCultureIgnoreCase));
}
private void BindClass(ILGenerator generator, LocalBuilder result, PropertyInfo propertyInfo) private void BindClass(ILGenerator generator, LocalBuilder result, PropertyInfo propertyInfo)
{ {
@ -253,9 +254,9 @@ namespace SqlSugar
case CSharpDataType.@float: case CSharpDataType.@float:
case CSharpDataType.@double: case CSharpDataType.@double:
CheckType(bind.DoubleThrow, bindProperyTypeName, validPropertyName, propertyName); CheckType(bind.DoubleThrow, bindProperyTypeName, validPropertyName, propertyName);
if (bindProperyTypeName == "double") if (bindProperyTypeName.IsIn( "double", "single")&&dbTypeName!="real")
method = isNullableType ? getConvertDouble : getDouble; method = isNullableType ? getConvertDouble : getDouble;
if (bindProperyTypeName == "single") else
method = isNullableType ? getConvertFloat : getFloat; method = isNullableType ? getConvertFloat : getFloat;
break; break;
case CSharpDataType.Guid: case CSharpDataType.Guid:

View File

@ -1085,7 +1085,7 @@ namespace SqlSugar
} }
else else
{ {
result = this.Bind.DataReaderToList<TResult>(entityType, dataReader, QueryBuilder.SelectCacheKey); result = this.Bind.DataReaderToList<TResult>(entityType, dataReader);
} }
SetContextModel(result, entityType); SetContextModel(result, entityType);
return result; return result;

View File

@ -110,6 +110,7 @@ namespace SqlSugar
public abstract string SqlTranslationRight { get; } public abstract string SqlTranslationRight { get; }
public virtual string SqlFalse { get { return "1=2 "; } } public virtual string SqlFalse { get { return "1=2 "; } }
public virtual string SqlDateNow { get { return "GETDATE()"; } } public virtual string SqlDateNow { get { return "GETDATE()"; } }
public virtual string SqlSelectAll { get { return "*"; } }
#endregion #endregion
} }
} }

View File

@ -4,6 +4,7 @@ using System.Linq;
using System.Linq.Expressions; using System.Linq.Expressions;
using System.Reflection; using System.Reflection;
using System.Text; using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks; using System.Threading.Tasks;
namespace SqlSugar namespace SqlSugar
{ {
@ -48,7 +49,7 @@ namespace SqlSugar
} }
MemberAssignment memberAssignment = (MemberAssignment)binding; MemberAssignment memberAssignment = (MemberAssignment)binding;
var type = memberAssignment.Member.ReflectedType; var type = memberAssignment.Member.ReflectedType;
var memberName =this.Context.GetDbColumnName(type.Name, memberAssignment.Member.Name); var memberName = this.Context.GetDbColumnName(type.Name, memberAssignment.Member.Name);
var item = memberAssignment.Expression; var item = memberAssignment.Expression;
if ((item is MemberExpression) && ((MemberExpression)item).Expression == null) if ((item is MemberExpression) && ((MemberExpression)item).Expression == null)
{ {
@ -56,21 +57,21 @@ namespace SqlSugar
string parameterName = AppendParameter(paramterValue); string parameterName = AppendParameter(paramterValue);
this.Context.Result.Append(base.Context.GetEqString(memberName, parameterName)); this.Context.Result.Append(base.Context.GetEqString(memberName, parameterName));
} }
else if (item is UnaryExpression || item.NodeType == ExpressionType.Constant || (item is MemberExpression) && ((MemberExpression)item).Expression.NodeType == ExpressionType.Constant) else if (IsMethod(item))
{
if (item is UnaryExpression)
item = (item as UnaryExpression).Operand;
MethodCall(parameter, memberName, item);
}
else if (IsConst(item))
{ {
base.Expression = item; base.Expression = item;
base.Start(); base.Start();
string parameterName = this.Context.SqlParameterKeyWord + ExpressionConst.Const+ this.Context.ParameterIndex; string parameterName = this.Context.SqlParameterKeyWord + ExpressionConst.Const + this.Context.ParameterIndex;
parameter.Context.Result.Append(base.Context.GetEqString(memberName, parameterName)); parameter.Context.Result.Append(base.Context.GetEqString(memberName, parameterName));
this.Context.Parameters.Add(new SugarParameter(parameterName, parameter.CommonTempData)); this.Context.Parameters.Add(new SugarParameter(parameterName, parameter.CommonTempData));
this.Context.ParameterIndex++; this.Context.ParameterIndex++;
} }
else if (item is MethodCallExpression)
{
base.Expression = item;
base.Start();
parameter.Context.Result.Append(base.Context.GetEqString(memberName, parameter.CommonTempData.ObjToString()));
}
else if (item is MemberExpression) else if (item is MemberExpression)
{ {
if (base.Context.Result.IsLockCurrentParameter == false) if (base.Context.Result.IsLockCurrentParameter == false)
@ -87,12 +88,46 @@ namespace SqlSugar
} }
else if (item is BinaryExpression) else if (item is BinaryExpression)
{ {
var result=GetNewExpressionValue(item); var result = GetNewExpressionValue(item);
this.Context.Result.Append(base.Context.GetEqString(memberName, result)); this.Context.Result.Append(base.Context.GetEqString(memberName, result));
} }
} }
} }
private static bool IsConst(Expression item)
{
return item is UnaryExpression || item.NodeType == ExpressionType.Constant || (item is MemberExpression) && ((MemberExpression)item).Expression.NodeType == ExpressionType.Constant;
}
private static bool IsMethod(Expression item)
{
return item is MethodCallExpression || (item is UnaryExpression && (item as UnaryExpression).Operand is MethodCallExpression);
}
private void MethodCall(ExpressionParameter parameter, string memberName, Expression item)
{
if (IsSubMethod(item as MethodCallExpression))
{
UtilMethods.GetOldValue(parameter.CommonTempData, () =>
{
parameter.CommonTempData = CommonTempDataType.Result;
base.Expression = item;
base.Start();
var subSql = base.Context.GetEqString(memberName, parameter.CommonTempData.ObjToString());
if (ResolveExpressType.Update == this.Context.ResolveType) {
subSql = Regex.Replace(subSql,@" \[\w+?\]\.",this.Context.GetTranslationTableName(parameter.CurrentExpression.Type.Name,true) +".");
}
parameter.Context.Result.Append(subSql);
});
}
else
{
base.Expression = item;
base.Start();
parameter.Context.Result.Append(base.Context.GetEqString(memberName, parameter.CommonTempData.ObjToString()));
}
}
private void Select(MemberInitExpression expression, ExpressionParameter parameter, bool isSingle) private void Select(MemberInitExpression expression, ExpressionParameter parameter, bool isSingle)
{ {
foreach (MemberBinding binding in expression.Bindings) foreach (MemberBinding binding in expression.Bindings)
@ -107,5 +142,10 @@ namespace SqlSugar
ResolveNewExpressions(parameter, item, memberName); ResolveNewExpressions(parameter, item, memberName);
} }
} }
private bool IsSubMethod(MethodCallExpression express)
{
return SubTools.SubItemsConst.Any(it =>express.Object != null && express.Object.Type.Name == "Subqueryable`1");
}
} }
} }

View File

@ -45,7 +45,7 @@ namespace SqlSugar
//Check.Exception(!(parameter.BaseExpression is BinaryExpression), "Current expressions are not supported"); //Check.Exception(!(parameter.BaseExpression is BinaryExpression), "Current expressions are not supported");
SubResolve subResolve = new SubResolve(express, this.Context, parameter.OppsiteExpression); SubResolve subResolve = new SubResolve(express, this.Context, parameter.OppsiteExpression);
var appendSql = subResolve.GetSql(); var appendSql = subResolve.GetSql();
if (this.Context.ResolveType.IsIn(ResolveExpressType.SelectMultiple, ResolveExpressType.SelectSingle)) if (this.Context.ResolveType.IsIn(ResolveExpressType.SelectMultiple, ResolveExpressType.SelectSingle)||(parameter.BaseParameter!=null&&parameter.BaseParameter.CommonTempData!=null&&parameter.BaseParameter.CommonTempData.Equals(CommonTempDataType.Result)))
{ {
parameter.BaseParameter.CommonTempData = appendSql; parameter.BaseParameter.CommonTempData = appendSql;
} }
@ -105,7 +105,12 @@ namespace SqlSugar
private void SqlFuncMethod(ExpressionParameter parameter, MethodCallExpression express, bool? isLeft) private void SqlFuncMethod(ExpressionParameter parameter, MethodCallExpression express, bool? isLeft)
{ {
CheckMethod(express); if (!CheckMethod(express))
{
CusMethod(parameter, express, isLeft);
}
else
{
var method = express.Method; var method = express.Method;
string name = method.Name; string name = method.Name;
var args = express.Arguments.Cast<Expression>().ToList(); var args = express.Arguments.Cast<Expression>().ToList();
@ -131,6 +136,30 @@ namespace SqlSugar
break; break;
} }
} }
}
private void CusMethod(ExpressionParameter parameter, MethodCallExpression express, bool? isLeft)
{
try
{
var constValue = ExpressionTool.DynamicInvoke(express);
parameter.BaseParameter.CommonTempData = constValue;
var parameterName = base.AppendParameter(constValue);
if (parameter.BaseParameter.CommonTempData != null && parameter.BaseParameter.CommonTempData.Equals(CommonTempDataType.Result))
{
this.Context.Result.Append(parameterName);
}
else
{
base.AppendValue(parameter, isLeft, parameterName);
}
}
catch
{
Check.Exception(true, string.Format(ErrorMessage.MethodError, express.Method.Name));
}
}
private void NativeExtensionMethod(ExpressionParameter parameter, MethodCallExpression express, bool? isLeft, string name, List<MethodCallExpressionArgs> appendArgs = null) private void NativeExtensionMethod(ExpressionParameter parameter, MethodCallExpression express, bool? isLeft, string name, List<MethodCallExpressionArgs> appendArgs = null)
{ {
var method = express.Method; var method = express.Method;
@ -521,10 +550,14 @@ namespace SqlSugar
{ {
return SubTools.SubItemsConst.Any(it => it.Name == methodName) && express.Object != null && express.Object.Type.Name == "Subqueryable`1"; return SubTools.SubItemsConst.Any(it => it.Name == methodName) && express.Object != null && express.Object.Type.Name == "Subqueryable`1";
} }
private void CheckMethod(MethodCallExpression expression) private bool CheckMethod(MethodCallExpression expression)
{ {
if (IsExtMethod(expression.Method.Name)) return; if (IsExtMethod(expression.Method.Name))
Check.Exception(expression.Method.ReflectedType().FullName != ExpressionConst.SqlFuncFullName, string.Format(ErrorMessage.MethodError, expression.Method.Name)); return true;
if (expression.Method.ReflectedType().FullName != ExpressionConst.SqlFuncFullName)
return false;
else
return true;
} }
} }
} }

View File

@ -140,33 +140,33 @@ namespace SqlSugar
} }
private void InitMppingInfo(EntityInfo entityInfo) private void InitMppingInfo(EntityInfo entityInfo)
{ {
if (this.MappingTables == null) if (this.Context.MappingTables == null)
this.MappingTables = new MappingTableList(); this.Context.MappingTables = new MappingTableList();
if (this.MappingColumns == null) if (this.Context.MappingColumns == null)
this.MappingColumns = new MappingColumnList(); this.Context.MappingColumns = new MappingColumnList();
if (this.IgnoreColumns == null) if (this.Context.IgnoreColumns == null)
this.IgnoreColumns = new IgnoreColumnList(); this.Context.IgnoreColumns = new IgnoreColumnList();
if (!this.MappingTables.Any(it => it.EntityName == entityInfo.EntityName)) if (!this.Context.MappingTables.Any(it => it.EntityName == entityInfo.EntityName))
{ {
if (entityInfo.DbTableName != entityInfo.EntityName && entityInfo.DbTableName.HasValue()) if (entityInfo.DbTableName != entityInfo.EntityName && entityInfo.DbTableName.HasValue())
{ {
this.MappingTables.Add(entityInfo.EntityName, entityInfo.DbTableName); this.Context.MappingTables.Add(entityInfo.EntityName, entityInfo.DbTableName);
} }
} }
if (entityInfo.Columns.Any(it => it.EntityName == entityInfo.EntityName)) if (entityInfo.Columns.Any(it => it.EntityName == entityInfo.EntityName))
{ {
var mappingColumnInfos = this.MappingColumns.Where(it => it.EntityName == entityInfo.EntityName); var mappingColumnInfos = this.Context.MappingColumns.Where(it => it.EntityName == entityInfo.EntityName);
foreach (var item in entityInfo.Columns.Where(it => it.IsIgnore == false)) foreach (var item in entityInfo.Columns.Where(it => it.IsIgnore == false))
{ {
if (!mappingColumnInfos.Any(it => it.PropertyName == item.PropertyName)) if (!mappingColumnInfos.Any(it => it.PropertyName == item.PropertyName))
if (item.PropertyName != item.DbColumnName && item.DbColumnName.HasValue()) if (item.PropertyName != item.DbColumnName && item.DbColumnName.HasValue())
this.MappingColumns.Add(item.PropertyName, item.DbColumnName, item.EntityName); this.Context.MappingColumns.Add(item.PropertyName, item.DbColumnName, item.EntityName);
} }
var ignoreInfos = this.IgnoreColumns.Where(it => it.EntityName == entityInfo.EntityName); var ignoreInfos = this.Context.IgnoreColumns.Where(it => it.EntityName == entityInfo.EntityName);
foreach (var item in entityInfo.Columns.Where(it => it.IsIgnore)) foreach (var item in entityInfo.Columns.Where(it => it.IsIgnore))
{ {
if (!ignoreInfos.Any(it => it.PropertyName == item.PropertyName)) if (!ignoreInfos.Any(it => it.PropertyName == item.PropertyName))
this.IgnoreColumns.Add(item.PropertyName, item.EntityName); this.Context.IgnoreColumns.Add(item.PropertyName, item.EntityName);
} }
} }
} }

View File

@ -20,6 +20,6 @@ namespace SqlSugar
string GetDbTypeName(string csharpTypeName); string GetDbTypeName(string csharpTypeName);
string GetCsharpTypeName(string dbTypeName); string GetCsharpTypeName(string dbTypeName);
List<KeyValuePair<string, CSharpDataType>> MappingTypes { get; } List<KeyValuePair<string, CSharpDataType>> MappingTypes { get; }
List<T> DataReaderToList<T>(Type type, IDataReader reader, string fields); List<T> DataReaderToList<T>(Type type, IDataReader reader);
} }
} }

View File

@ -1,7 +1,9 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Data; using System.Data;
using System.Dynamic;
using System.Linq; using System.Linq;
using System.Linq.Expressions;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
namespace SqlSugar namespace SqlSugar
@ -12,8 +14,7 @@ namespace SqlSugar
CommandType CommandType { get; set; } CommandType CommandType { get; set; }
String AppendWhereOrAnd(bool isWhere, string sqlString); String AppendWhereOrAnd(bool isWhere, string sqlString);
string AppendHaving(string sqlString); string AppendHaving(string sqlString);
string SqlTranslationLeft { get; }
string SqlTranslationRight { get; }
SqlQueryBuilder SqlQueryBuilder { get; set; } SqlQueryBuilder SqlQueryBuilder { get; set; }
QueryBuilder QueryBuilder { get; set; } QueryBuilder QueryBuilder { get; set; }
InsertBuilder InsertBuilder { get; set; } InsertBuilder InsertBuilder { get; set; }
@ -23,6 +24,9 @@ namespace SqlSugar
string SqlParameterKeyWord { get; } string SqlParameterKeyWord { get; }
string SqlFalse { get; } string SqlFalse { get; }
string SqlDateNow { get; } string SqlDateNow { get; }
string SqlTranslationLeft { get; }
string SqlTranslationRight { get; }
string SqlSelectAll { get; }
string GetTranslationTableName(string name); string GetTranslationTableName(string name);
string GetTranslationColumnName(string entityName, string propertyName); string GetTranslationColumnName(string entityName, string propertyName);

View File

@ -2,7 +2,7 @@
<PropertyGroup> <PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework> <TargetFramework>netstandard2.0</TargetFramework>
<Version>4.6.0.6</Version> <Version>4.6.0.9</Version>
<Copyright>sun_kai_xuan</Copyright> <Copyright>sun_kai_xuan</Copyright>
<PackageProjectUrl>https://github.com/sunkaixuan/SqlSugar</PackageProjectUrl> <PackageProjectUrl>https://github.com/sunkaixuan/SqlSugar</PackageProjectUrl>
<PackageLicenseUrl></PackageLicenseUrl> <PackageLicenseUrl></PackageLicenseUrl>

View File

@ -310,6 +310,51 @@ namespace SqlSugar
queryable.Where(joinExpression); queryable.Where(joinExpression);
return queryable; return queryable;
} }
public virtual ISugarQueryable<T, T2> Queryable<T, T2>(
ISugarQueryable<T> joinQueryable1, ISugarQueryable<T2> joinQueryable2, Expression<Func<T, T2, bool>> joinExpression) where T : class, new() where T2 : class, new()
{
return Queryable(joinQueryable1, joinQueryable2, JoinType.Inner, joinExpression);
}
public virtual ISugarQueryable<T, T2> Queryable<T, T2>(
ISugarQueryable<T> joinQueryable1, ISugarQueryable<T2> joinQueryable2, JoinType joinType, Expression<Func<T, T2, bool>> joinExpression) where T : class, new() where T2 : class, new()
{
Check.Exception(joinQueryable1.QueryBuilder.Take != null || joinQueryable1.QueryBuilder.Skip != null || joinQueryable1.QueryBuilder.OrderByValue.HasValue(), "joinQueryable1 Cannot have 'Skip' 'ToPageList' 'Take' Or 'OrderBy'");
Check.Exception(joinQueryable2.QueryBuilder.Take != null || joinQueryable2.QueryBuilder.Skip != null || joinQueryable2.QueryBuilder.OrderByValue.HasValue(), "joinQueryable2 Cannot have 'Skip' 'ToPageList' 'Take' Or 'OrderBy'");
var sqlBuilder = InstanceFactory.GetSqlbuilder(base.Context.CurrentConnectionConfig);
sqlBuilder.Context = base.Context;
InitMppingInfo<T, T2>();
var types = new Type[] { typeof(T2) };
var queryable = InstanceFactory.GetQueryable<T, T2>(base.CurrentConnectionConfig);
queryable.Context = base.Context;
queryable.SqlBuilder = sqlBuilder;
queryable.QueryBuilder = InstanceFactory.GetQueryBuilder(base.CurrentConnectionConfig);
queryable.QueryBuilder.JoinQueryInfos = new List<JoinQueryInfo>();
queryable.QueryBuilder.Builder = sqlBuilder;
queryable.QueryBuilder.Context = base.Context;
queryable.QueryBuilder.EntityType = typeof(T);
queryable.QueryBuilder.LambdaExpressions = InstanceFactory.GetLambdaExpressions(base.CurrentConnectionConfig);
//master
var shortName1 = joinExpression.Parameters[0].Name;
var sqlObj1 = joinQueryable1.ToSql();
string sql1 = sqlObj1.Key;
UtilMethods.RepairReplicationParameters(ref sql1, sqlObj1.Value.ToArray(), 0);
queryable.QueryBuilder.EntityName = sqlBuilder.GetPackTable(sql1, shortName1); ;
queryable.QueryBuilder.Parameters.AddRange(sqlObj1.Value);
//join table 1
var shortName2 = joinExpression.Parameters[1].Name;
var sqlObj2 = joinQueryable2.ToSql();
string sql2 = sqlObj2.Key;
UtilMethods.RepairReplicationParameters(ref sql2, sqlObj2.Value.ToArray(), 1);
queryable.QueryBuilder.Parameters.AddRange(sqlObj2.Value);
var exp = queryable.QueryBuilder.GetExpressionValue(joinExpression, ResolveExpressType.WhereMultiple);
queryable.QueryBuilder.JoinQueryInfos.Add(new JoinQueryInfo() { JoinIndex = 0, JoinType = joinType, JoinWhere = exp.GetResultString(), TableName = sqlBuilder.GetPackTable(sql2,shortName2)});
return queryable;
}
#endregion #endregion
public virtual ISugarQueryable<T> UnionAll<T>(params ISugarQueryable<T>[] queryables) where T : class, new() public virtual ISugarQueryable<T> UnionAll<T>(params ISugarQueryable<T>[] queryables) where T : class, new()
@ -333,7 +378,7 @@ namespace SqlSugar
var allParameters = allItems.SelectMany(it => it.Value).ToArray(); var allParameters = allItems.SelectMany(it => it.Value).ToArray();
var resulut = base.Context.Queryable<ExpandoObject>().AS(UtilMethods.GetPackTable(allSql, "unionTable")); var resulut = base.Context.Queryable<ExpandoObject>().AS(UtilMethods.GetPackTable(allSql, "unionTable"));
resulut.AddParameters(allParameters); resulut.AddParameters(allParameters);
return resulut.Select<T>("*"); return resulut.Select<T>(sqlBuilder.SqlSelectAll);
} }
public virtual ISugarQueryable<T> UnionAll<T>(List<ISugarQueryable<T>> queryables) where T : class, new() public virtual ISugarQueryable<T> UnionAll<T>(List<ISugarQueryable<T>> queryables) where T : class, new()
{ {

View File

@ -2,7 +2,7 @@
<package > <package >
<metadata> <metadata>
<id>sqlSugarCore</id> <id>sqlSugarCore</id>
<version>4.6.0.6</version> <version>4.6.0.9</version>
<authors>sunkaixuan</authors> <authors>sunkaixuan</authors>
<owners>Landa</owners> <owners>Landa</owners>
<licenseUrl>http://www.apache.org/licenses/LICENSE-2.0.html</licenseUrl> <licenseUrl>http://www.apache.org/licenses/LICENSE-2.0.html</licenseUrl>