diff --git a/Src/Asp.NetCore2/MongoDbTest/ExpTest.cs b/Src/Asp.NetCore2/MongoDbTest/ExpTest.cs index 8e31d3f45..ca19c5988 100644 --- a/Src/Asp.NetCore2/MongoDbTest/ExpTest.cs +++ b/Src/Asp.NetCore2/MongoDbTest/ExpTest.cs @@ -1,5 +1,4 @@ -using Npgsql; -using SqlSugar.MongoDbCore; +using SqlSugar.MongoDb; using System; using System.Collections.Generic; using System.ComponentModel; diff --git a/Src/Asp.NetCore2/MongoDbTest/OrmTest/Models/Order.cs b/Src/Asp.NetCore2/MongoDbTest/OrmTest/Models/Order.cs index 2e09d35a2..4ce2290a3 100644 --- a/Src/Asp.NetCore2/MongoDbTest/OrmTest/Models/Order.cs +++ b/Src/Asp.NetCore2/MongoDbTest/OrmTest/Models/Order.cs @@ -1,5 +1,5 @@ using SqlSugar; -using SqlSugar.MongoDbCore; +using SqlSugar.MongoDb; using System; using System.Collections.Generic; using System.Linq; diff --git a/Src/Asp.NetCore2/MongoDbTest/OrmTest/Models/OrderItem.cs b/Src/Asp.NetCore2/MongoDbTest/OrmTest/Models/OrderItem.cs index 6d96560bd..7b71c6ef9 100644 --- a/Src/Asp.NetCore2/MongoDbTest/OrmTest/Models/OrderItem.cs +++ b/Src/Asp.NetCore2/MongoDbTest/OrmTest/Models/OrderItem.cs @@ -1,4 +1,4 @@ -using SqlSugar.MongoDbCore; +using SqlSugar.MongoDb; using System; using System.Collections.Generic; using System.Linq; diff --git a/Src/Asp.NetCore2/MongoDbTest/OrmTest/OrmTest.cs b/Src/Asp.NetCore2/MongoDbTest/OrmTest/OrmTest.cs index 4dfc79d1a..a80056947 100644 --- a/Src/Asp.NetCore2/MongoDbTest/OrmTest/OrmTest.cs +++ b/Src/Asp.NetCore2/MongoDbTest/OrmTest/OrmTest.cs @@ -76,7 +76,7 @@ namespace MongoDbTest .ExecuteCommand(); var delrow3 = db.Deleteable() - .Where(it=>it.Id==ids.Last()||it.Name=="A1") + .Where(it=>it.Id==ids.Last() ) .ExecuteCommand(); var list = db.Queryable().ToDataTable(); @@ -103,13 +103,20 @@ namespace MongoDbTest Name=it.Name }).ToDataTable(); - var list11 = db.Queryable() - .Select(it => new - { - Id = it.Id, - Name = it.Name - }).ToDataTable(); + var list11 = db.Queryable() + .Select(it => new + { + Id = it.Id, + Name = it.Name + }).ToList(); + var list12 = db.Queryable() + .Select(it => new + { + Id = it.Id, + Name = it.Name+"b", + Name2 = "b"+it.Name + }).ToDataTable(); //测试生成SQL性能 TestSqlBuilder(db); } diff --git a/Src/Asp.NetCore2/SqlSugar.MongoDbCore/ExpToSql/Context/ExpressionVisitorContext.cs b/Src/Asp.NetCore2/SqlSugar.MongoDbCore/ExpToSql/Context/ExpressionVisitorContext.cs index f78357ac7..e9b9ba6a3 100644 --- a/Src/Asp.NetCore2/SqlSugar.MongoDbCore/ExpToSql/Context/ExpressionVisitorContext.cs +++ b/Src/Asp.NetCore2/SqlSugar.MongoDbCore/ExpToSql/Context/ExpressionVisitorContext.cs @@ -2,7 +2,7 @@ using System.Collections.Generic; using System.Text; -namespace SqlSugar.MongoDbCore +namespace SqlSugar.MongoDb { public class ExpressionVisitorContext { diff --git a/Src/Asp.NetCore2/SqlSugar.MongoDbCore/ExpToSql/Context/MongoNestedTranslatorContext.cs b/Src/Asp.NetCore2/SqlSugar.MongoDbCore/ExpToSql/Context/MongoNestedTranslatorContext.cs index 48f34a174..0e2e848b6 100644 --- a/Src/Asp.NetCore2/SqlSugar.MongoDbCore/ExpToSql/Context/MongoNestedTranslatorContext.cs +++ b/Src/Asp.NetCore2/SqlSugar.MongoDbCore/ExpToSql/Context/MongoNestedTranslatorContext.cs @@ -2,7 +2,7 @@ using System.Collections.Generic; using System.Text; -namespace SqlSugar.MongoDbCore +namespace SqlSugar.MongoDb { public class MongoNestedTranslatorContext { diff --git a/Src/Asp.NetCore2/SqlSugar.MongoDbCore/ExpToSql/ExpressionVisitor.cs b/Src/Asp.NetCore2/SqlSugar.MongoDbCore/ExpToSql/ExpressionVisitor.cs index 39bd1bfc2..791093110 100644 --- a/Src/Asp.NetCore2/SqlSugar.MongoDbCore/ExpToSql/ExpressionVisitor.cs +++ b/Src/Asp.NetCore2/SqlSugar.MongoDbCore/ExpToSql/ExpressionVisitor.cs @@ -6,7 +6,7 @@ using System.Data; using System.Linq.Expressions; using System.Text; -namespace SqlSugar.MongoDbCore +namespace SqlSugar.MongoDb { public class ExpressionVisitor { diff --git a/Src/Asp.NetCore2/SqlSugar.MongoDbCore/ExpToSql/MongoDbExpTools.cs b/Src/Asp.NetCore2/SqlSugar.MongoDbCore/ExpToSql/MongoDbExpTools.cs index 4b2169c64..6df4ee968 100644 --- a/Src/Asp.NetCore2/SqlSugar.MongoDbCore/ExpToSql/MongoDbExpTools.cs +++ b/Src/Asp.NetCore2/SqlSugar.MongoDbCore/ExpToSql/MongoDbExpTools.cs @@ -4,7 +4,7 @@ using System.Globalization; using System.Linq.Expressions; using System.Text; -namespace SqlSugar.MongoDbCore +namespace SqlSugar.MongoDb { public class MongoDbExpTools { diff --git a/Src/Asp.NetCore2/SqlSugar.MongoDbCore/ExpToSql/MongoNestedTranslator.cs b/Src/Asp.NetCore2/SqlSugar.MongoDbCore/ExpToSql/MongoNestedTranslator.cs index 3f0eaabd4..a94dac909 100644 --- a/Src/Asp.NetCore2/SqlSugar.MongoDbCore/ExpToSql/MongoNestedTranslator.cs +++ b/Src/Asp.NetCore2/SqlSugar.MongoDbCore/ExpToSql/MongoNestedTranslator.cs @@ -5,7 +5,7 @@ using System.Linq.Expressions; using Newtonsoft.Json.Linq; using MongoDB.Bson; -namespace SqlSugar.MongoDbCore +namespace SqlSugar.MongoDb { public static class MongoNestedTranslator { diff --git a/Src/Asp.NetCore2/SqlSugar.MongoDbCore/ExpToSql/VisitorItems/BinaryExpressionTranslator.cs b/Src/Asp.NetCore2/SqlSugar.MongoDbCore/ExpToSql/VisitorItems/BinaryExpressionTranslator.cs index 5902953d5..fe5ae6f2a 100644 --- a/Src/Asp.NetCore2/SqlSugar.MongoDbCore/ExpToSql/VisitorItems/BinaryExpressionTranslator.cs +++ b/Src/Asp.NetCore2/SqlSugar.MongoDbCore/ExpToSql/VisitorItems/BinaryExpressionTranslator.cs @@ -1,4 +1,5 @@ -using MongoDB.Bson; +using Dm.parser; +using MongoDB.Bson; using MongoDB.Driver; using Newtonsoft.Json.Linq; using System; @@ -7,7 +8,7 @@ using System.Linq; using System.Linq.Expressions; using System.Text; -namespace SqlSugar.MongoDbCore +namespace SqlSugar.MongoDb { public class BinaryExpressionTranslator { @@ -63,7 +64,7 @@ namespace SqlSugar.MongoDbCore OutParameters(expr, out field, out value, out leftIsMember, out rightIsMember, out op); if (op == null) { - return GetCalculationOperation(field, expr.NodeType, value); + return GetCalculationOperation(field, expr.NodeType, value,leftIsMember, rightIsMember); } else { @@ -127,7 +128,7 @@ namespace SqlSugar.MongoDbCore if (_context?.context != null) { var entityInfo = _context.context.EntityMaintenance.GetEntityInfo(parameter.Type); - var columnInfo = entityInfo.Columns.FirstOrDefault(s => s.PropertyName == leftValue); + var columnInfo = entityInfo.Columns.FirstOrDefault(s => s.PropertyName == leftValue||s.DbColumnName==leftValue); if (columnInfo != null) { leftValue = columnInfo.DbColumnName; @@ -139,7 +140,17 @@ namespace SqlSugar.MongoDbCore } } } - return new BsonDocument { { leftValue, rightValue } }; + if (op == "$eq") + { + return new BsonDocument { { leftValue, rightValue } }; + } + else + { + return new BsonDocument + { + { leftValue, new BsonDocument { { op, rightValue } } } + }; + } } else { @@ -150,7 +161,7 @@ namespace SqlSugar.MongoDbCore } } - private BsonDocument GetCalculationOperation(BsonValue field, ExpressionType nodeType, BsonValue value) + private BsonDocument GetCalculationOperation(BsonValue field, ExpressionType nodeType, BsonValue value, bool leftIsMember, bool rightIsMember) { string operation = nodeType switch { @@ -161,11 +172,19 @@ namespace SqlSugar.MongoDbCore ExpressionType.Modulo => "$mod", _ => throw new NotSupportedException($"Unsupported calculation operation: {nodeType}") }; - + if (operation == "$add"&& value.BsonType==BsonType.String) + { + operation = "$concat"; + return new BsonDocument + { + { operation, new BsonArray { UtilMethods.GetBsonValue(leftIsMember, field), UtilMethods.GetBsonValue(rightIsMember, value) } } + }; + ; + } return new BsonDocument - { - { field.ToString(), new BsonDocument { { operation, value } } } - }; + { + { field.ToString(), new BsonDocument { { operation, value } } } + }; } private static bool IsRightValue(bool leftIsMember, bool rightIsMember, string op) diff --git a/Src/Asp.NetCore2/SqlSugar.MongoDbCore/ExpToSql/VisitorItems/FieldPathExtractor.cs b/Src/Asp.NetCore2/SqlSugar.MongoDbCore/ExpToSql/VisitorItems/FieldPathExtractor.cs index f91283279..156ec0cc9 100644 --- a/Src/Asp.NetCore2/SqlSugar.MongoDbCore/ExpToSql/VisitorItems/FieldPathExtractor.cs +++ b/Src/Asp.NetCore2/SqlSugar.MongoDbCore/ExpToSql/VisitorItems/FieldPathExtractor.cs @@ -6,7 +6,7 @@ using System.Linq; using System.Linq.Expressions; using System.Text; -namespace SqlSugar.MongoDbCore +namespace SqlSugar.MongoDb { public class FieldPathExtractor { diff --git a/Src/Asp.NetCore2/SqlSugar.MongoDbCore/ExpToSql/VisitorItems/MemberInitExpressionTractor.cs b/Src/Asp.NetCore2/SqlSugar.MongoDbCore/ExpToSql/VisitorItems/MemberInitExpressionTractor.cs index 185e6a59b..9728354fd 100644 --- a/Src/Asp.NetCore2/SqlSugar.MongoDbCore/ExpToSql/VisitorItems/MemberInitExpressionTractor.cs +++ b/Src/Asp.NetCore2/SqlSugar.MongoDbCore/ExpToSql/VisitorItems/MemberInitExpressionTractor.cs @@ -5,7 +5,7 @@ using System.Linq; using System.Linq.Expressions; using System.Text; -namespace SqlSugar.MongoDbCore +namespace SqlSugar.MongoDb { public class MemberInitExpressionTractor { diff --git a/Src/Asp.NetCore2/SqlSugar.MongoDbCore/ExpToSql/VisitorItems/MethodCallExpressionTractor.cs b/Src/Asp.NetCore2/SqlSugar.MongoDbCore/ExpToSql/VisitorItems/MethodCallExpressionTractor.cs index fa7fe1d6b..400e77e06 100644 --- a/Src/Asp.NetCore2/SqlSugar.MongoDbCore/ExpToSql/VisitorItems/MethodCallExpressionTractor.cs +++ b/Src/Asp.NetCore2/SqlSugar.MongoDbCore/ExpToSql/VisitorItems/MethodCallExpressionTractor.cs @@ -4,7 +4,7 @@ using System.Collections.Generic; using System.Linq.Expressions; using System.Text; -namespace SqlSugar.MongoDbCore +namespace SqlSugar.MongoDb { public class MethodCallExpressionTractor { diff --git a/Src/Asp.NetCore2/SqlSugar.MongoDbCore/ExpToSql/VisitorItems/NewExpressionTranslator.cs b/Src/Asp.NetCore2/SqlSugar.MongoDbCore/ExpToSql/VisitorItems/NewExpressionTranslator.cs index 75bea11b6..2a4568aaa 100644 --- a/Src/Asp.NetCore2/SqlSugar.MongoDbCore/ExpToSql/VisitorItems/NewExpressionTranslator.cs +++ b/Src/Asp.NetCore2/SqlSugar.MongoDbCore/ExpToSql/VisitorItems/NewExpressionTranslator.cs @@ -3,7 +3,7 @@ using System; using System.Collections.Generic; using System.Linq.Expressions; -namespace SqlSugar.MongoDbCore +namespace SqlSugar.MongoDb { public class NewExpressionTractor { @@ -44,13 +44,25 @@ namespace SqlSugar.MongoDbCore // 使用 ExpressionVisitor 访问表达式 var json = new ExpressionVisitor(_context, _visitorContext).Visit(exp.Arguments[exp.Members.IndexOf(member)]); - // 构建 MongoDB 的投影文档 - projectionDocument[fieldName] = "$" + json.ToString(); + SetProjectionValue(json, fieldName, projectionDocument); } projectionDocument["_id"] = 0; return projectionDocument; } + private static void SetProjectionValue(BsonValue json, string fieldName, BsonDocument projectionDocument) + { + var jsonString = json.ToJson(UtilMethods.GetJsonWriterSettings()); + if (jsonString.StartsWith("{") && jsonString.EndsWith("}")) + { + projectionDocument[fieldName] = json; + } + else + { + projectionDocument[fieldName] = "$"+jsonString.TrimStart('\"').TrimEnd('\"'); + } + } + private BsonValue Update(Expression expr) { var exp = expr as NewExpression ?? throw new InvalidOperationException("Expression must be NewExpression"); diff --git a/Src/Asp.NetCore2/SqlSugar.MongoDbCore/ExpToSql/VisitorItems/ValueExtractor.cs b/Src/Asp.NetCore2/SqlSugar.MongoDbCore/ExpToSql/VisitorItems/ValueExtractor.cs index 947ff9407..47ea42c54 100644 --- a/Src/Asp.NetCore2/SqlSugar.MongoDbCore/ExpToSql/VisitorItems/ValueExtractor.cs +++ b/Src/Asp.NetCore2/SqlSugar.MongoDbCore/ExpToSql/VisitorItems/ValueExtractor.cs @@ -5,7 +5,7 @@ using System.Collections.Generic; using System.Linq.Expressions; using System.Text; -namespace SqlSugar.MongoDbCore +namespace SqlSugar.MongoDb { public class ValueExtractor { diff --git a/Src/Asp.NetCore2/SqlSugar.MongoDbCore/MongoDb/MongoDbProvider.cs b/Src/Asp.NetCore2/SqlSugar.MongoDbCore/MongoDb/MongoDbProvider.cs index 09cdead4d..f3e62550b 100644 --- a/Src/Asp.NetCore2/SqlSugar.MongoDbCore/MongoDb/MongoDbProvider.cs +++ b/Src/Asp.NetCore2/SqlSugar.MongoDbCore/MongoDb/MongoDbProvider.cs @@ -1,6 +1,6 @@ using Microsoft.Data.SqlClient; using MongoDb.Ado.data; -using SqlSugar.MongoDbCore; +using SqlSugar.MongoDb; using System; using System.Collections.Generic; using System.Data; diff --git a/Src/Asp.NetCore2/SqlSugar.MongoDbCore/MongoDb/SqlBuilder/MongoDbExpressionContext.cs b/Src/Asp.NetCore2/SqlSugar.MongoDbCore/MongoDb/SqlBuilder/MongoDbExpressionContext.cs index 578de1463..fa2fa0429 100644 --- a/Src/Asp.NetCore2/SqlSugar.MongoDbCore/MongoDb/SqlBuilder/MongoDbExpressionContext.cs +++ b/Src/Asp.NetCore2/SqlSugar.MongoDbCore/MongoDb/SqlBuilder/MongoDbExpressionContext.cs @@ -1,6 +1,6 @@ using MongoDB.Bson.IO; using MongoDB.Bson; -using SqlSugar.MongoDbCore; +using SqlSugar.MongoDb; using System; using System.Linq; using System.Linq.Expressions; diff --git a/Src/Asp.NetCore2/SqlSugar.MongoDbCore/MongoDb/SqlBuilder/MongoDbQueryBuilder.cs b/Src/Asp.NetCore2/SqlSugar.MongoDbCore/MongoDb/SqlBuilder/MongoDbQueryBuilder.cs index 16f7cfc78..2896ad617 100644 --- a/Src/Asp.NetCore2/SqlSugar.MongoDbCore/MongoDb/SqlBuilder/MongoDbQueryBuilder.cs +++ b/Src/Asp.NetCore2/SqlSugar.MongoDbCore/MongoDb/SqlBuilder/MongoDbQueryBuilder.cs @@ -1,5 +1,5 @@ using MongoDB.Bson; -using SqlSugar.MongoDbCore; +using SqlSugar.MongoDb; using System; using System.Collections.Generic; using System.Linq; diff --git a/Src/Asp.NetCore2/SqlSugar.MongoDbCore/MongoDb/SqlSugarMongoDbDataAdapter.cs b/Src/Asp.NetCore2/SqlSugar.MongoDbCore/MongoDb/SqlSugarMongoDbDataAdapter.cs index 998cfa6bc..c2028d800 100644 --- a/Src/Asp.NetCore2/SqlSugar.MongoDbCore/MongoDb/SqlSugarMongoDbDataAdapter.cs +++ b/Src/Asp.NetCore2/SqlSugar.MongoDbCore/MongoDb/SqlSugarMongoDbDataAdapter.cs @@ -3,7 +3,7 @@ using System; using System.Collections.Generic; using System.Text; -namespace SqlSugar.MongoDbCore +namespace SqlSugar.MongoDb { public class SqlSugarMongoDbDataAdapter : MongoDbDataAdapter, SqlSugar.IDataAdapter { diff --git a/Src/Asp.NetCore2/SqlSugar.MongoDbCore/MongoDbBase.cs b/Src/Asp.NetCore2/SqlSugar.MongoDbCore/MongoDbBase.cs index 5e3fa19e2..88880703a 100644 --- a/Src/Asp.NetCore2/SqlSugar.MongoDbCore/MongoDbBase.cs +++ b/Src/Asp.NetCore2/SqlSugar.MongoDbCore/MongoDbBase.cs @@ -2,7 +2,7 @@ using System.Collections.Generic; using System.Text; -namespace SqlSugar.MongoDbCore +namespace SqlSugar.MongoDb { public class MongoDbBase { diff --git a/Src/Asp.NetCore2/SqlSugar.MongoDbCore/Tools/UtilMethods.cs b/Src/Asp.NetCore2/SqlSugar.MongoDbCore/Tools/UtilMethods.cs index f57abef5c..e1ddc33c4 100644 --- a/Src/Asp.NetCore2/SqlSugar.MongoDbCore/Tools/UtilMethods.cs +++ b/Src/Asp.NetCore2/SqlSugar.MongoDbCore/Tools/UtilMethods.cs @@ -1,4 +1,5 @@ -using System; +using MongoDB.Bson; +using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; @@ -471,6 +472,13 @@ namespace SqlSugar.MongoDb } return dic; } + + internal static BsonValue GetBsonValue(bool isMember, BsonValue field) + { + if (isMember) return "$" + field; + else + return field; + } //public static object ConvertDataByTypeName(string ctypename,string value) //{ // var item = new ConditionalModel() {