diff --git a/Src/Asp.NetCore2/MongoDbTest/UnitTest/QuerySelect.cs b/Src/Asp.NetCore2/MongoDbTest/UnitTest/QuerySelect.cs index 95abc3fb9..f95bb7b4d 100644 --- a/Src/Asp.NetCore2/MongoDbTest/UnitTest/QuerySelect.cs +++ b/Src/Asp.NetCore2/MongoDbTest/UnitTest/QuerySelect.cs @@ -2,6 +2,7 @@ using MongoDB.Driver; using MongoDB.Driver.Linq; using MongoDbTest.DBHelper; +using SqlSugar; using SqlSugar.MongoDb; using System; using System.Collections.Generic; @@ -114,6 +115,12 @@ namespace MongoDbTest }).ToList(); if (list11.First().Age != 12) Cases.ThrowUnitError(); if (list11.First().Age2 != 13) Cases.ThrowUnitError(); + + var list12= db.Queryable().Select(it => new + { + Age = -it.Age + }).ToList(); + if(list12.First().Age!=-11) Cases.ThrowUnitError(); } [SqlSugar.SugarTable("UnitStudent1231sds3z1")] public class Student : MongoDbBase diff --git a/Src/Asp.NetCore2/SqlSugar.MongoDbCore/ExpToSql/ExpressionVisitor.cs b/Src/Asp.NetCore2/SqlSugar.MongoDbCore/ExpToSql/ExpressionVisitor.cs index f6266be25..e42528a87 100644 --- a/Src/Asp.NetCore2/SqlSugar.MongoDbCore/ExpToSql/ExpressionVisitor.cs +++ b/Src/Asp.NetCore2/SqlSugar.MongoDbCore/ExpToSql/ExpressionVisitor.cs @@ -27,7 +27,15 @@ namespace SqlSugar.MongoDb public BsonValue Visit(Expression expr) { expr = MongoDbExpTools.RemoveConvert(expr); - + if (expr.NodeType == ExpressionType.Negate) + { + expr=(expr as UnaryExpression).Operand; + var value=new ExpressionVisitor(context,visitorContext).Visit(expr); + var isMemember = MongoDbExpTools.GetIsMemember(expr); + if (isMemember) + value = $"${value}"; + return new BsonDocument("$multiply", new BsonArray { -1, value }); + } switch (expr) { case BinaryExpression binary: @@ -51,6 +59,6 @@ namespace SqlSugar.MongoDb default: throw new NotSupportedException($"Unsupported expression: {expr.NodeType}"); } - } + } } } diff --git a/Src/Asp.NetCore2/SqlSugar.MongoDbCore/ExpToSql/MongoDbExpTools.cs b/Src/Asp.NetCore2/SqlSugar.MongoDbCore/ExpToSql/MongoDbExpTools.cs index 6df4ee968..3f2be2ee9 100644 --- a/Src/Asp.NetCore2/SqlSugar.MongoDbCore/ExpToSql/MongoDbExpTools.cs +++ b/Src/Asp.NetCore2/SqlSugar.MongoDbCore/ExpToSql/MongoDbExpTools.cs @@ -73,6 +73,11 @@ namespace SqlSugar.MongoDb return false; } + + public static bool GetIsMemember(Expression expr) + { + return expr is MemberExpression member && member.Expression is ParameterExpression; + } internal static Expression RemoveConvert(Expression item) { for (int i = 0; i < 10; i++) diff --git a/Src/Asp.NetCore2/SqlSugar.MongoDbCore/ExpToSql/VisitorItems/BinaryExpressionTranslator/Helper.cs b/Src/Asp.NetCore2/SqlSugar.MongoDbCore/ExpToSql/VisitorItems/BinaryExpressionTranslator/Helper.cs index 26f040cd1..861d460f5 100644 --- a/Src/Asp.NetCore2/SqlSugar.MongoDbCore/ExpToSql/VisitorItems/BinaryExpressionTranslator/Helper.cs +++ b/Src/Asp.NetCore2/SqlSugar.MongoDbCore/ExpToSql/VisitorItems/BinaryExpressionTranslator/Helper.cs @@ -7,7 +7,8 @@ using System.Text; namespace SqlSugar.MongoDb { public partial class BinaryExpressionTranslator - { + { + private static bool IsEq(string op) { return op == "$eq";