diff --git a/Src/Asp.NetCore2/MongoDbTest/OrmTest/OrmTest.cs b/Src/Asp.NetCore2/MongoDbTest/OrmTest/OrmTest.cs index eead63f35..e41f9d6ce 100644 --- a/Src/Asp.NetCore2/MongoDbTest/OrmTest/OrmTest.cs +++ b/Src/Asp.NetCore2/MongoDbTest/OrmTest/OrmTest.cs @@ -97,6 +97,12 @@ namespace MongoDbTest var list9 = db.Queryable().OrderBy(it=>it.Name).OrderByDescending(it => it.Price).ToList(); + var list10 = db.Queryable() + .Select(it=>new OrderInfo() { + Id=it.Id, + Name=it.Name + }).ToDataTable(); + //测试生成SQL性能 TestSqlBuilder(db); } diff --git a/Src/Asp.NetCore2/SqlSugar.MongoDbCore/ExpToSql/VisitorItems/MemberInitExpressionTractor.cs b/Src/Asp.NetCore2/SqlSugar.MongoDbCore/ExpToSql/VisitorItems/MemberInitExpressionTractor.cs index cb589acd0..969b75bfd 100644 --- a/Src/Asp.NetCore2/SqlSugar.MongoDbCore/ExpToSql/VisitorItems/MemberInitExpressionTractor.cs +++ b/Src/Asp.NetCore2/SqlSugar.MongoDbCore/ExpToSql/VisitorItems/MemberInitExpressionTractor.cs @@ -23,7 +23,33 @@ namespace SqlSugar.MongoDbCore { return Update(expr); } - throw new Exception(""); + else if(this._context.resolveType == ResolveExpressType.SelectSingle) + { + return Select(expr); + } + throw new NotSupportedException(this._context.resolveType+""); + } + + private BsonValue Select(Expression expr) + { + var exp = expr as MemberInitExpression; + var projectionDocument = new BsonDocument(); + + // Iterate over the bindings in the MemberInitExpression + foreach (var binding in exp.Bindings) + { + if (binding is MemberAssignment assignment) + { + var fieldName = assignment.Member.Name; // 原字段名 + + // 将原字段名动态转换为 新字段名(例如:name -> name1) + var newFieldName = fieldName ; + + // 将字段投影为 "新字段名" : "$原字段名" + projectionDocument[newFieldName] = $"${fieldName}"; + } + } + return projectionDocument; } private BsonValue Update(Expression expr) diff --git a/Src/Asp.NetCore2/SqlSugar.MongoDbCore/MongoDb/SqlBuilder/MongoDbQueryBuilder.cs b/Src/Asp.NetCore2/SqlSugar.MongoDbCore/MongoDb/SqlBuilder/MongoDbQueryBuilder.cs index 6537fff40..16f7cfc78 100644 --- a/Src/Asp.NetCore2/SqlSugar.MongoDbCore/MongoDb/SqlBuilder/MongoDbQueryBuilder.cs +++ b/Src/Asp.NetCore2/SqlSugar.MongoDbCore/MongoDb/SqlBuilder/MongoDbQueryBuilder.cs @@ -1,7 +1,9 @@ using MongoDB.Bson; +using SqlSugar.MongoDbCore; using System; using System.Collections.Generic; using System.Linq; +using System.Linq.Expressions; using System.Text; using System.Text.Json.Nodes; using System.Text.RegularExpressions; @@ -112,7 +114,20 @@ namespace SqlSugar.MongoDb operations.Add($"{{ \"$sort\": {sortDoc.ToJson()} }}"); } } - #endregion + #endregion + + #region Select + if (this.SelectValue is Expression expression) + { + var dos=MongoNestedTranslator.Translate(expression, new MongoNestedTranslatorContext() { + context = this.Context, + resolveType=ResolveExpressType.SelectSingle + }); + var json = dos.ToJson(UtilMethods.GetJsonWriterSettings()); + operations.Add($"{{\"$project\": {json} }}"); + } + #endregion + sb.Append($"aggregate {this.GetTableNameString} "); sb.Append("["); sb.Append(string.Join(", ", operations));