mirror of
https://gitee.com/dotnetchina/SqlSugar.git
synced 2025-08-23 22:11:36 +08:00
Update Core
This commit is contained in:
parent
a1f9df6664
commit
90609f758d
@ -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()
|
||||||
{
|
{
|
||||||
|
@ -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();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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; }
|
||||||
|
@ -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)
|
||||||
|
46
Src/Asp.NetCore2/SqlSeverTest/SqlSeverTest/Demos/9_Aop.cs
Normal file
46
Src/Asp.NetCore2/SqlSeverTest/SqlSeverTest/Demos/9_Aop.cs
Normal 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)
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
@ -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; }
|
||||||
|
}
|
||||||
|
}
|
@ -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;
|
||||||
|
@ -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();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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; }
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -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()
|
||||||
{
|
{
|
||||||
|
@ -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";
|
||||||
|
@ -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()
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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;
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
|
||||||
|
@ -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 ");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -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");
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -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)
|
||||||
{
|
{
|
||||||
|
@ -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
|
||||||
{
|
{
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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:
|
||||||
|
@ -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;
|
||||||
|
@ -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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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&¶meter.BaseParameter.CommonTempData!=null&¶meter.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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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);
|
||||||
|
@ -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>
|
||||||
|
@ -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()
|
||||||
{
|
{
|
||||||
|
@ -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>
|
||||||
|
Binary file not shown.
Loading…
Reference in New Issue
Block a user