diff --git a/Src/Asp.NetCore2/MongoDbTest/OrmTest/OrmTest.cs b/Src/Asp.NetCore2/MongoDbTest/OrmTest/OrmTest.cs index 02fc1186f..cd18d067d 100644 --- a/Src/Asp.NetCore2/MongoDbTest/OrmTest/OrmTest.cs +++ b/Src/Asp.NetCore2/MongoDbTest/OrmTest/OrmTest.cs @@ -23,19 +23,18 @@ namespace MongoDbTest var updateRow = db.Updateable(new List() { - new OrderInfo() { Id = ids.First(),Name="a3"}, + new OrderInfo() { Id = ids.First(),Name="a3",Price=11}, new OrderInfo() { Id = ids.Last(),Name="a4"} }) .ExecuteCommand(); var delrow = db.Deleteable(new OrderInfo() { Id = ids.Last() }) - .ExecuteCommand(); - - - - var list2 = db.Queryable().ToList(); + .ExecuteCommand(); var list = db.Queryable().ToDataTable(); + + var list2 = db.Queryable().Where(it=>it.Name=="a3"&&it.Price==11).ToList(); + //测试生成SQL性能 TestSqlBuilder(db); } diff --git a/Src/Asp.NetCore2/SqlSugar.MongoDbCore/ExpToSql/Context/MongoNestedTranslatorContext.cs b/Src/Asp.NetCore2/SqlSugar.MongoDbCore/ExpToSql/Context/MongoNestedTranslatorContext.cs index 82d3e7d11..48f34a174 100644 --- a/Src/Asp.NetCore2/SqlSugar.MongoDbCore/ExpToSql/Context/MongoNestedTranslatorContext.cs +++ b/Src/Asp.NetCore2/SqlSugar.MongoDbCore/ExpToSql/Context/MongoNestedTranslatorContext.cs @@ -6,5 +6,7 @@ namespace SqlSugar.MongoDbCore { public class MongoNestedTranslatorContext { + public ResolveExpressType resolveType { get; internal set; } + public SqlSugarProvider context { get; internal set; } } } diff --git a/Src/Asp.NetCore2/SqlSugar.MongoDbCore/MongoDb/SqlBuilder/MongoDbExpressionContext.cs b/Src/Asp.NetCore2/SqlSugar.MongoDbCore/MongoDb/SqlBuilder/MongoDbExpressionContext.cs index f3d36ed9f..b5eb1d270 100644 --- a/Src/Asp.NetCore2/SqlSugar.MongoDbCore/MongoDb/SqlBuilder/MongoDbExpressionContext.cs +++ b/Src/Asp.NetCore2/SqlSugar.MongoDbCore/MongoDb/SqlBuilder/MongoDbExpressionContext.cs @@ -1,4 +1,5 @@ -using System; +using SqlSugar.MongoDbCore; +using System; using System.Linq; using System.Linq.Expressions; namespace SqlSugar.MongoDb @@ -7,7 +8,11 @@ namespace SqlSugar.MongoDb { public new void Resolve(Expression expression, ResolveExpressType resolveType) { - + var context = new MongoNestedTranslatorContext(); + context.resolveType = resolveType; + context.context = this.Context; + var sql=MongoNestedTranslator.Translate(expression, context); + this.Result.Append(sql); } public SqlSugarProvider Context { get; set; } diff --git a/Src/Asp.NetCore2/SqlSugar.MongoDbCore/MongoDb/SqlBuilder/MongoDbQueryBuilder.cs b/Src/Asp.NetCore2/SqlSugar.MongoDbCore/MongoDb/SqlBuilder/MongoDbQueryBuilder.cs index f2d86e6f4..31e1c9c6a 100644 --- a/Src/Asp.NetCore2/SqlSugar.MongoDbCore/MongoDb/SqlBuilder/MongoDbQueryBuilder.cs +++ b/Src/Asp.NetCore2/SqlSugar.MongoDbCore/MongoDb/SqlBuilder/MongoDbQueryBuilder.cs @@ -1,4 +1,5 @@ -using System.Collections.Generic; +using System; +using System.Collections.Generic; using System.Linq; using System.Text; using System.Text.Json.Nodes; @@ -50,6 +51,19 @@ namespace SqlSugar.MongoDb { List operations = new List(); var sb = new StringBuilder(); + + foreach (var item in this.WhereInfos) + { + // 去除开头的 WHERE 或 AND(忽略大小写和空格) + string trimmed = item.TrimStart(); + if (trimmed.StartsWith("WHERE", StringComparison.OrdinalIgnoreCase)) + trimmed = trimmed.Substring(5).TrimStart(); + else if (trimmed.StartsWith("AND", StringComparison.OrdinalIgnoreCase)) + trimmed = trimmed.Substring(3).TrimStart(); + // item 是 JSON 格式字符串,直接包进 $match + operations.Add($"{{ \"$match\": {trimmed} }}"); + } + sb.Append($"aggregate {this.GetTableNameString} "); sb.Append("["); sb.Append(string.Join(", ", operations));