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)