diff --git a/FreeSql.Tests/FreeSql.Tests/UnitTest1.cs b/FreeSql.Tests/FreeSql.Tests/UnitTest1.cs index 351dda5e0..d127a26de 100644 --- a/FreeSql.Tests/FreeSql.Tests/UnitTest1.cs +++ b/FreeSql.Tests/FreeSql.Tests/UnitTest1.cs @@ -341,7 +341,10 @@ namespace FreeSql.Tests [Fact] public void Test1() { - var kfkfjdfg = g.oracle.Select().Where(a => (DateTime.Now - a.EditTime).TotalMinutes > 100).ToSql(); + g.oracle.Select() + .InnerJoin((a,b) => true) + .Where((a,b) => (DateTime.Now - a.EditTime).TotalMinutes > 100) + .ToSql(); g.oracle.Aop.SyncStructureAfter += (s, e) => diff --git a/FreeSql/Interface/Curd/ISelect/ISelect10.cs b/FreeSql/Interface/Curd/ISelect/ISelect10.cs index 15a8f4dd9..11cb5e76a 100644 --- a/FreeSql/Interface/Curd/ISelect/ISelect10.cs +++ b/FreeSql/Interface/Curd/ISelect/ISelect10.cs @@ -33,6 +33,10 @@ namespace FreeSql TMember Avg(Expression> column); Task AvgAsync(Expression> column); + ISelect LeftJoin(Expression> exp); + ISelect InnerJoin(Expression> exp); + ISelect RightJoin(Expression> exp); + ISelect Where(Expression> exp); ISelect WhereIf(bool condition, Expression> exp); diff --git a/FreeSql/Interface/Curd/ISelect/ISelect2.cs b/FreeSql/Interface/Curd/ISelect/ISelect2.cs index c13f1b71d..0b6c271b8 100644 --- a/FreeSql/Interface/Curd/ISelect/ISelect2.cs +++ b/FreeSql/Interface/Curd/ISelect/ISelect2.cs @@ -34,6 +34,10 @@ namespace FreeSql TMember Avg(Expression> column); Task AvgAsync(Expression> column); + ISelect LeftJoin(Expression> exp); + ISelect InnerJoin(Expression> exp); + ISelect RightJoin(Expression> exp); + ISelect Where(Expression> exp); ISelect WhereIf(bool condition, Expression> exp); diff --git a/FreeSql/Interface/Curd/ISelect/ISelect3.cs b/FreeSql/Interface/Curd/ISelect/ISelect3.cs index 0d036dd60..e890ca75b 100644 --- a/FreeSql/Interface/Curd/ISelect/ISelect3.cs +++ b/FreeSql/Interface/Curd/ISelect/ISelect3.cs @@ -33,6 +33,10 @@ namespace FreeSql TMember Avg(Expression> column); Task AvgAsync(Expression> column); + ISelect LeftJoin(Expression> exp); + ISelect InnerJoin(Expression> exp); + ISelect RightJoin(Expression> exp); + ISelect Where(Expression> exp); ISelect WhereIf(bool condition, Expression> exp); diff --git a/FreeSql/Interface/Curd/ISelect/ISelect4.cs b/FreeSql/Interface/Curd/ISelect/ISelect4.cs index 7787cf39f..da0a140e7 100644 --- a/FreeSql/Interface/Curd/ISelect/ISelect4.cs +++ b/FreeSql/Interface/Curd/ISelect/ISelect4.cs @@ -33,6 +33,10 @@ namespace FreeSql TMember Avg(Expression> column); Task AvgAsync(Expression> column); + ISelect LeftJoin(Expression> exp); + ISelect InnerJoin(Expression> exp); + ISelect RightJoin(Expression> exp); + ISelect Where(Expression> exp); ISelect WhereIf(bool condition, Expression> exp); diff --git a/FreeSql/Interface/Curd/ISelect/ISelect5.cs b/FreeSql/Interface/Curd/ISelect/ISelect5.cs index c579b50ae..28198dd02 100644 --- a/FreeSql/Interface/Curd/ISelect/ISelect5.cs +++ b/FreeSql/Interface/Curd/ISelect/ISelect5.cs @@ -33,6 +33,10 @@ namespace FreeSql TMember Avg(Expression> column); Task AvgAsync(Expression> column); + ISelect LeftJoin(Expression> exp); + ISelect InnerJoin(Expression> exp); + ISelect RightJoin(Expression> exp); + ISelect Where(Expression> exp); ISelect WhereIf(bool condition, Expression> exp); diff --git a/FreeSql/Interface/Curd/ISelect/ISelect6.cs b/FreeSql/Interface/Curd/ISelect/ISelect6.cs index 05e42d96e..01a2b3ed4 100644 --- a/FreeSql/Interface/Curd/ISelect/ISelect6.cs +++ b/FreeSql/Interface/Curd/ISelect/ISelect6.cs @@ -33,6 +33,10 @@ namespace FreeSql TMember Avg(Expression> column); Task AvgAsync(Expression> column); + ISelect LeftJoin(Expression> exp); + ISelect InnerJoin(Expression> exp); + ISelect RightJoin(Expression> exp); + ISelect Where(Expression> exp); ISelect WhereIf(bool condition, Expression> exp); diff --git a/FreeSql/Interface/Curd/ISelect/ISelect7.cs b/FreeSql/Interface/Curd/ISelect/ISelect7.cs index 25356edb3..ca2f6a822 100644 --- a/FreeSql/Interface/Curd/ISelect/ISelect7.cs +++ b/FreeSql/Interface/Curd/ISelect/ISelect7.cs @@ -33,6 +33,10 @@ namespace FreeSql TMember Avg(Expression> column); Task AvgAsync(Expression> column); + ISelect LeftJoin(Expression> exp); + ISelect InnerJoin(Expression> exp); + ISelect RightJoin(Expression> exp); + ISelect Where(Expression> exp); ISelect WhereIf(bool condition, Expression> exp); diff --git a/FreeSql/Interface/Curd/ISelect/ISelect8.cs b/FreeSql/Interface/Curd/ISelect/ISelect8.cs index 1404be93c..c77040b1e 100644 --- a/FreeSql/Interface/Curd/ISelect/ISelect8.cs +++ b/FreeSql/Interface/Curd/ISelect/ISelect8.cs @@ -33,6 +33,10 @@ namespace FreeSql TMember Avg(Expression> column); Task AvgAsync(Expression> column); + ISelect LeftJoin(Expression> exp); + ISelect InnerJoin(Expression> exp); + ISelect RightJoin(Expression> exp); + ISelect Where(Expression> exp); ISelect WhereIf(bool condition, Expression> exp); diff --git a/FreeSql/Interface/Curd/ISelect/ISelect9.cs b/FreeSql/Interface/Curd/ISelect/ISelect9.cs index b6ed09ba4..feba4958f 100644 --- a/FreeSql/Interface/Curd/ISelect/ISelect9.cs +++ b/FreeSql/Interface/Curd/ISelect/ISelect9.cs @@ -33,6 +33,10 @@ namespace FreeSql TMember Avg(Expression> column); Task AvgAsync(Expression> column); + ISelect LeftJoin(Expression> exp); + ISelect InnerJoin(Expression> exp); + ISelect RightJoin(Expression> exp); + ISelect Where(Expression> exp); ISelect WhereIf(bool condition, Expression> exp); diff --git a/FreeSql/Internal/CommonProvider/SelectProvider/Select10Provider.cs b/FreeSql/Internal/CommonProvider/SelectProvider/Select10Provider.cs index a73fea3a2..8aec418b4 100644 --- a/FreeSql/Internal/CommonProvider/SelectProvider/Select10Provider.cs +++ b/FreeSql/Internal/CommonProvider/SelectProvider/Select10Provider.cs @@ -177,6 +177,27 @@ namespace FreeSql.Internal.CommonProvider return this.InternalToSql(select?.Body); } + ISelect ISelect.LeftJoin(Expression> exp) + { + if (exp == null) return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); + } + + ISelect ISelect.InnerJoin(Expression> exp) + { + if (exp == null) return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + return this.InternalJoin(exp?.Body, SelectTableInfoType.InnerJoin); + } + + ISelect ISelect.RightJoin(Expression> exp) + { + if (exp == null) return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + return this.InternalJoin(exp?.Body, SelectTableInfoType.RightJoin); + } + ISelect ISelect.Where(Expression> exp) { if (exp == null) return this.Where(null); diff --git a/FreeSql/Internal/CommonProvider/SelectProvider/Select2Provider.cs b/FreeSql/Internal/CommonProvider/SelectProvider/Select2Provider.cs index 25a82a0cb..552f76601 100644 --- a/FreeSql/Internal/CommonProvider/SelectProvider/Select2Provider.cs +++ b/FreeSql/Internal/CommonProvider/SelectProvider/Select2Provider.cs @@ -153,6 +153,27 @@ namespace FreeSql.Internal.CommonProvider return this.InternalToSql(select?.Body); } + ISelect ISelect.LeftJoin(Expression> exp) + { + if (exp == null) return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); + } + + ISelect ISelect.InnerJoin(Expression> exp) + { + if (exp == null) return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + return this.InternalJoin(exp?.Body, SelectTableInfoType.InnerJoin); + } + + ISelect ISelect.RightJoin(Expression> exp) + { + if (exp == null) return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + return this.InternalJoin(exp?.Body, SelectTableInfoType.RightJoin); + } + ISelect ISelect.Where(Expression> exp) { if (exp == null) return this.Where(null); diff --git a/FreeSql/Internal/CommonProvider/SelectProvider/Select3Provider.cs b/FreeSql/Internal/CommonProvider/SelectProvider/Select3Provider.cs index 82a0f6a54..cd80bc194 100644 --- a/FreeSql/Internal/CommonProvider/SelectProvider/Select3Provider.cs +++ b/FreeSql/Internal/CommonProvider/SelectProvider/Select3Provider.cs @@ -156,6 +156,27 @@ namespace FreeSql.Internal.CommonProvider return this.InternalToSql(select?.Body); } + ISelect ISelect.LeftJoin(Expression> exp) + { + if (exp == null) return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); + } + + ISelect ISelect.InnerJoin(Expression> exp) + { + if (exp == null) return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + return this.InternalJoin(exp?.Body, SelectTableInfoType.InnerJoin); + } + + ISelect ISelect.RightJoin(Expression> exp) + { + if (exp == null) return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + return this.InternalJoin(exp?.Body, SelectTableInfoType.RightJoin); + } + ISelect ISelect.Where(Expression> exp) { if (exp == null) return this.Where(null); diff --git a/FreeSql/Internal/CommonProvider/SelectProvider/Select4Provider.cs b/FreeSql/Internal/CommonProvider/SelectProvider/Select4Provider.cs index 1efcdb3cf..707080a64 100644 --- a/FreeSql/Internal/CommonProvider/SelectProvider/Select4Provider.cs +++ b/FreeSql/Internal/CommonProvider/SelectProvider/Select4Provider.cs @@ -159,6 +159,27 @@ namespace FreeSql.Internal.CommonProvider return this.InternalToSql(select?.Body); } + ISelect ISelect.LeftJoin(Expression> exp) + { + if (exp == null) return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); + } + + ISelect ISelect.InnerJoin(Expression> exp) + { + if (exp == null) return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + return this.InternalJoin(exp?.Body, SelectTableInfoType.InnerJoin); + } + + ISelect ISelect.RightJoin(Expression> exp) + { + if (exp == null) return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + return this.InternalJoin(exp?.Body, SelectTableInfoType.RightJoin); + } + ISelect ISelect.Where(Expression> exp) { if (exp == null) return this.Where(null); diff --git a/FreeSql/Internal/CommonProvider/SelectProvider/Select5Provider.cs b/FreeSql/Internal/CommonProvider/SelectProvider/Select5Provider.cs index ef30f98ae..60a3c5e6c 100644 --- a/FreeSql/Internal/CommonProvider/SelectProvider/Select5Provider.cs +++ b/FreeSql/Internal/CommonProvider/SelectProvider/Select5Provider.cs @@ -162,6 +162,27 @@ namespace FreeSql.Internal.CommonProvider return this.InternalToSql(select?.Body); } + ISelect ISelect.LeftJoin(Expression> exp) + { + if (exp == null) return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); + } + + ISelect ISelect.InnerJoin(Expression> exp) + { + if (exp == null) return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + return this.InternalJoin(exp?.Body, SelectTableInfoType.InnerJoin); + } + + ISelect ISelect.RightJoin(Expression> exp) + { + if (exp == null) return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + return this.InternalJoin(exp?.Body, SelectTableInfoType.RightJoin); + } + ISelect ISelect.Where(Expression> exp) { if (exp == null) return this.Where(null); diff --git a/FreeSql/Internal/CommonProvider/SelectProvider/Select6Provider.cs b/FreeSql/Internal/CommonProvider/SelectProvider/Select6Provider.cs index 0572ee69a..ee59440c6 100644 --- a/FreeSql/Internal/CommonProvider/SelectProvider/Select6Provider.cs +++ b/FreeSql/Internal/CommonProvider/SelectProvider/Select6Provider.cs @@ -165,6 +165,27 @@ namespace FreeSql.Internal.CommonProvider return this.InternalToSql(select?.Body); } + ISelect ISelect.LeftJoin(Expression> exp) + { + if (exp == null) return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); + } + + ISelect ISelect.InnerJoin(Expression> exp) + { + if (exp == null) return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + return this.InternalJoin(exp?.Body, SelectTableInfoType.InnerJoin); + } + + ISelect ISelect.RightJoin(Expression> exp) + { + if (exp == null) return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + return this.InternalJoin(exp?.Body, SelectTableInfoType.RightJoin); + } + ISelect ISelect.Where(Expression> exp) { if (exp == null) return this.Where(null); diff --git a/FreeSql/Internal/CommonProvider/SelectProvider/Select7Provider.cs b/FreeSql/Internal/CommonProvider/SelectProvider/Select7Provider.cs index c0b9161e1..2118ee361 100644 --- a/FreeSql/Internal/CommonProvider/SelectProvider/Select7Provider.cs +++ b/FreeSql/Internal/CommonProvider/SelectProvider/Select7Provider.cs @@ -168,6 +168,27 @@ namespace FreeSql.Internal.CommonProvider return this.InternalToSql(select?.Body); } + ISelect ISelect.LeftJoin(Expression> exp) + { + if (exp == null) return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); + } + + ISelect ISelect.InnerJoin(Expression> exp) + { + if (exp == null) return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + return this.InternalJoin(exp?.Body, SelectTableInfoType.InnerJoin); + } + + ISelect ISelect.RightJoin(Expression> exp) + { + if (exp == null) return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + return this.InternalJoin(exp?.Body, SelectTableInfoType.RightJoin); + } + ISelect ISelect.Where(Expression> exp) { if (exp == null) return this.Where(null); diff --git a/FreeSql/Internal/CommonProvider/SelectProvider/Select8Provider.cs b/FreeSql/Internal/CommonProvider/SelectProvider/Select8Provider.cs index a5bf2c744..cc611d621 100644 --- a/FreeSql/Internal/CommonProvider/SelectProvider/Select8Provider.cs +++ b/FreeSql/Internal/CommonProvider/SelectProvider/Select8Provider.cs @@ -171,6 +171,27 @@ namespace FreeSql.Internal.CommonProvider return this.InternalToSql(select?.Body); } + ISelect ISelect.LeftJoin(Expression> exp) + { + if (exp == null) return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); + } + + ISelect ISelect.InnerJoin(Expression> exp) + { + if (exp == null) return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + return this.InternalJoin(exp?.Body, SelectTableInfoType.InnerJoin); + } + + ISelect ISelect.RightJoin(Expression> exp) + { + if (exp == null) return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + return this.InternalJoin(exp?.Body, SelectTableInfoType.RightJoin); + } + ISelect ISelect.Where(Expression> exp) { if (exp == null) return this.Where(null); diff --git a/FreeSql/Internal/CommonProvider/SelectProvider/Select9Provider.cs b/FreeSql/Internal/CommonProvider/SelectProvider/Select9Provider.cs index da94f75a4..3c3a8c1d8 100644 --- a/FreeSql/Internal/CommonProvider/SelectProvider/Select9Provider.cs +++ b/FreeSql/Internal/CommonProvider/SelectProvider/Select9Provider.cs @@ -174,6 +174,27 @@ namespace FreeSql.Internal.CommonProvider return this.InternalToSql(select?.Body); } + ISelect ISelect.LeftJoin(Expression> exp) + { + if (exp == null) return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); + } + + ISelect ISelect.InnerJoin(Expression> exp) + { + if (exp == null) return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + return this.InternalJoin(exp?.Body, SelectTableInfoType.InnerJoin); + } + + ISelect ISelect.RightJoin(Expression> exp) + { + if (exp == null) return this.InternalJoin(exp?.Body, SelectTableInfoType.LeftJoin); + for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a]; + return this.InternalJoin(exp?.Body, SelectTableInfoType.RightJoin); + } + ISelect ISelect.Where(Expression> exp) { if (exp == null) return this.Where(null);