diff --git a/Src/Asp.NetCore2/MongoDbTest/OrmTest/OrmTest.cs b/Src/Asp.NetCore2/MongoDbTest/OrmTest/OrmTest.cs index e15f56208..72d3563bf 100644 --- a/Src/Asp.NetCore2/MongoDbTest/OrmTest/OrmTest.cs +++ b/Src/Asp.NetCore2/MongoDbTest/OrmTest/OrmTest.cs @@ -40,8 +40,8 @@ namespace MongoDbTest var updateRow3= db.Updateable() - .SetColumns(it=>it.Name=="aa") - .Where(it=>it.Id==ids.Last()) + .SetColumns(it=>it.Name=="xx") + .Where(it=> it.Id == ids.Last()) .ExecuteCommand(); var delrow = db.Deleteable(new OrderInfo() { Id = ids.Last() }) diff --git a/Src/Asp.NetCore2/SqlSugar.MongoDbCore/ExpToSql/VisitorItems/BinaryExpressionTranslator.cs b/Src/Asp.NetCore2/SqlSugar.MongoDbCore/ExpToSql/VisitorItems/BinaryExpressionTranslator.cs index 0942443ef..ca5d69c5c 100644 --- a/Src/Asp.NetCore2/SqlSugar.MongoDbCore/ExpToSql/VisitorItems/BinaryExpressionTranslator.cs +++ b/Src/Asp.NetCore2/SqlSugar.MongoDbCore/ExpToSql/VisitorItems/BinaryExpressionTranslator.cs @@ -1,8 +1,9 @@ using MongoDB.Bson; using MongoDB.Driver; -using Newtonsoft.Json.Linq; +using Newtonsoft.Json.Linq; using System; using System.Collections.Generic; +using System.Linq; using System.Linq.Expressions; using System.Text; @@ -84,15 +85,63 @@ namespace SqlSugar.MongoDbCore _ => throw new NotSupportedException($"Unsupported binary op: {expr.NodeType}") }; - if (op == null && leftIsMember && !rightIsMember) - return new BsonDocument { { field.ToString(), value } }; - else if (op == null && rightIsMember && !leftIsMember) - return new BsonDocument { { value.ToString(), field } }; - return new BsonDocument + + string leftValue = ""; + BsonValue rightValue = ""; + if (IsLeftValue(leftIsMember, rightIsMember, op)|| IsRightValue(leftIsMember, rightIsMember, op)) + { + MemberExpression expression; + if (IsLeftValue(leftIsMember, rightIsMember, op)) + { + leftValue = field.ToString(); + rightValue = value; + expression = expr.Left as MemberExpression; + } + else + { + leftValue = value.ToString(); + rightValue = field; + expression = expr.Right as MemberExpression; + } + if (expression != null) + { + if (expression.Expression is ParameterExpression parameter) + { + if (_context.context != null) + { + var entityInfo = _context.context.EntityMaintenance.GetEntityInfo(parameter.Type); + var columnInfo = entityInfo.Columns.FirstOrDefault(s => s.PropertyName == leftValue); + if (columnInfo != null) + { + leftValue = columnInfo.DbColumnName; + if (columnInfo.IsPrimarykey) + { + rightValue = BsonValue.Create(ObjectId.Parse(value + "")); + } + } + } + } + } + return new BsonDocument { { leftValue, rightValue } }; + } + else + { + return new BsonDocument + { + { field.ToString(), new BsonDocument { { op, value } } } + }; + } + } + + private static bool IsRightValue(bool leftIsMember, bool rightIsMember, string op) { - { field.ToString(), new BsonDocument { { op, value } } } - }; + return op == null && rightIsMember && !leftIsMember; + } + + private static bool IsLeftValue(bool leftIsMember, bool rightIsMember, string op) + { + return op == null && leftIsMember && !rightIsMember; } } diff --git a/Src/Asp.NetCore2/SqlSugar.MongoDbCore/MongoDb/SqlBuilder/MongoDbExpressionContext.cs b/Src/Asp.NetCore2/SqlSugar.MongoDbCore/MongoDb/SqlBuilder/MongoDbExpressionContext.cs index 603780dbc..578de1463 100644 --- a/Src/Asp.NetCore2/SqlSugar.MongoDbCore/MongoDb/SqlBuilder/MongoDbExpressionContext.cs +++ b/Src/Asp.NetCore2/SqlSugar.MongoDbCore/MongoDb/SqlBuilder/MongoDbExpressionContext.cs @@ -12,7 +12,7 @@ namespace SqlSugar.MongoDb { var context = new MongoNestedTranslatorContext(); context.resolveType = resolveType; - context.context = this.Context; + context.context = this.SugarContext.Context; var sql=MongoNestedTranslator.Translate(expression, context); var shellString = sql.ToJson(new JsonWriterSettings {