diff --git a/FreeSql.DbContext/FreeSql.DbContext.xml b/FreeSql.DbContext/FreeSql.DbContext.xml
index 5ca74890..2acb6679 100644
--- a/FreeSql.DbContext/FreeSql.DbContext.xml
+++ b/FreeSql.DbContext/FreeSql.DbContext.xml
@@ -130,6 +130,13 @@
清空状态数据
+
+
+ 根据 lambda 条件删除数据
+
+
+
+
添加
@@ -520,5 +527,14 @@
+
+
+ 批量注入 Repository,可以参考代码自行调整
+
+
+
+
+
+
diff --git a/FreeSql.Tests/FreeSql.Tests/UnitTest3.cs b/FreeSql.Tests/FreeSql.Tests/UnitTest3.cs
index 4693b4fb..dcfab4da 100644
--- a/FreeSql.Tests/FreeSql.Tests/UnitTest3.cs
+++ b/FreeSql.Tests/FreeSql.Tests/UnitTest3.cs
@@ -224,11 +224,13 @@ namespace FreeSql.Tests
.Page(1, 10).ToSql("Id");
- var sqlextMax1 = g.mysql.Select()
+ var sqlextMax1 = g.sqlserver.Select()
.GroupBy(a => a.Id)
.ToSql(a => new
{
- Id = a.Key, EdiId = SqlExt.Max(a.Key).Over().ToValue()
+ Id = a.Key,
+ EdiId1 = SqlExt.Max(a.Key).Over().PartitionBy(new { a.Value.EdiId, a.Value.Id }).OrderByDescending(new { a.Value.EdiId, a.Value.Id }).ToValue(),
+ EdiId2 = SqlExt.Max(a.Key).Over().PartitionBy(a.Value.EdiId).OrderByDescending(a.Value.Id).ToValue(),
});
var sqlextGroupConcat = g.mysql.Select()
diff --git a/FreeSql/Extensions/FreeSqlGlobalExpressionCallExtensions.cs b/FreeSql/Extensions/FreeSqlGlobalExpressionCallExtensions.cs
index d8903744..a5cecf49 100644
--- a/FreeSql/Extensions/FreeSqlGlobalExpressionCallExtensions.cs
+++ b/FreeSql/Extensions/FreeSqlGlobalExpressionCallExtensions.cs
@@ -2,6 +2,7 @@
using System;
using System.Collections.Generic;
using System.Linq;
+using System.Linq.Expressions;
using System.Text;
using System.Threading;
using static FreeSql.SqlExtExtensions;
@@ -157,7 +158,19 @@ namespace FreeSql
}
public static ISqlOver PartitionBy(this ISqlOver that, object column)
{
- expSbLast.Sb.Append(" partition by ").Append(expContext.ParsedContent["column"]).Append(",");
+ var sb = expSbLast.Sb;
+ sb.Append(" partition by ");
+ var exp = expContext.RawExpression["column"];
+ if (exp.NodeType == ExpressionType.New)
+ {
+ var expNew = exp as NewExpression;
+ for (var a = 0; a < expNew.Arguments.Count; a++)
+ {
+ if (a > 0) sb.Append(",");
+ sb.Append(expContext.Utility.ParseExpression(expNew.Arguments[a]));
+ }
+ } else
+ sb.Append(expContext.ParsedContent["column"]);
return that;
}
public static ISqlOver OrderBy(this ISqlOver that, object column) => OrderByPriv(that, false);
@@ -170,9 +183,23 @@ namespace FreeSql
sb.Append(" order by ");
expSbLast.IsOrderBy = true;
}
- sb.Append(expContext.ParsedContent["column"]);
- if (isDesc) sb.Append(" desc");
- sb.Append(",");
+ var exp = expContext.RawExpression["column"];
+ if (exp.NodeType == ExpressionType.New)
+ {
+ var expNew = exp as NewExpression;
+ for (var a = 0; a < expNew.Arguments.Count; a++)
+ {
+ sb.Append(expContext.Utility.ParseExpression(expNew.Arguments[a]));
+ if (isDesc) sb.Append(" desc");
+ sb.Append(",");
+ }
+ }
+ else
+ {
+ sb.Append(expContext.ParsedContent["column"]);
+ if (isDesc) sb.Append(" desc");
+ sb.Append(",");
+ }
return that;
}
public static TValue ToValue(this ISqlOver that)
@@ -254,9 +281,23 @@ namespace FreeSql
sb.Append(" order by ");
expSbLast.IsOrderBy = true;
}
- sb.Append(expContext.ParsedContent["column"]);
- if (isDesc) sb.Append(" desc");
- sb.Append(",");
+ var exp = expContext.RawExpression["column"];
+ if (exp.NodeType == ExpressionType.New)
+ {
+ var expNew = exp as NewExpression;
+ for (var a = 0; a < expNew.Arguments.Count; a++)
+ {
+ sb.Append(expContext.Utility.ParseExpression(expNew.Arguments[a]));
+ if (isDesc) sb.Append(" desc");
+ sb.Append(",");
+ }
+ }
+ else
+ {
+ sb.Append(expContext.ParsedContent["column"]);
+ if (isDesc) sb.Append(" desc");
+ sb.Append(",");
+ }
return that;
}
public static string ToValue(this IGroupConcat that)