From 1e4ca247c6aacc54dd87943dbdc5ada56d49d7e6 Mon Sep 17 00:00:00 2001 From: sunkaixuan <610262374@qq.com> Date: Sun, 15 Jun 2025 09:50:02 +0800 Subject: [PATCH] Update mongoDb --- .../MongoDbTest/UnitTest/QuerySelect.cs | 6 ++++-- .../VisitorItems/MethodCallExpressionTractor.cs | 7 +++++++ .../MongoDb/SqlBuilder/MongoDbExpressionContext.cs | 14 +++++++------- 3 files changed, 18 insertions(+), 9 deletions(-) diff --git a/Src/Asp.NetCore2/MongoDbTest/UnitTest/QuerySelect.cs b/Src/Asp.NetCore2/MongoDbTest/UnitTest/QuerySelect.cs index 1bbd33aff..ad6ef1625 100644 --- a/Src/Asp.NetCore2/MongoDbTest/UnitTest/QuerySelect.cs +++ b/Src/Asp.NetCore2/MongoDbTest/UnitTest/QuerySelect.cs @@ -44,8 +44,10 @@ namespace MongoDbTest if(list2.First().date!=dt.ToString("yyyy-MM-dd")) Cases.ThrowUnitError(); var list3 = db.Queryable().Select(it => new { - date = it.Age.ToString() - }).ToList(); + date = it.Age.ToString(), + int32 = Convert.ToInt32(it.Age), + dateTime = Convert.ToDateTime(it.CreateDateTime), + }).ToList(); ; } [SqlSugar.SugarTable("UnitStudent1231sds3z1")] public class Student : MongoDbBase diff --git a/Src/Asp.NetCore2/SqlSugar.MongoDbCore/ExpToSql/VisitorItems/MethodCallExpressionTractor.cs b/Src/Asp.NetCore2/SqlSugar.MongoDbCore/ExpToSql/VisitorItems/MethodCallExpressionTractor.cs index bdecd89f1..c346ab1ee 100644 --- a/Src/Asp.NetCore2/SqlSugar.MongoDbCore/ExpToSql/VisitorItems/MethodCallExpressionTractor.cs +++ b/Src/Asp.NetCore2/SqlSugar.MongoDbCore/ExpToSql/VisitorItems/MethodCallExpressionTractor.cs @@ -25,6 +25,8 @@ namespace SqlSugar.MongoDb { var methodCallExpression = expr as MethodCallExpression; var name = methodCallExpression.Method.Name; + if (name == "ToDateTime") + name = "ToDate"; BsonValue result = null; if (typeof(IDbMethods).GetMethods().Any(it => it.Name == name)) { @@ -42,6 +44,11 @@ namespace SqlSugar.MongoDb var funcString = context.ToString(model); result = BsonDocument.Parse(funcString); } + else if (name.StartsWith("To")) + { + var value = context.GetType().GetMethod(name).Invoke(context, new object[] { model }); + result = BsonDocument.Parse(value?.ToString()); + } else { var funcString = context.GetType().GetMethod(name).Invoke(context, new object[] { model }); diff --git a/Src/Asp.NetCore2/SqlSugar.MongoDbCore/MongoDb/SqlBuilder/MongoDbExpressionContext.cs b/Src/Asp.NetCore2/SqlSugar.MongoDbCore/MongoDb/SqlBuilder/MongoDbExpressionContext.cs index 484049dc5..2309b0d9b 100644 --- a/Src/Asp.NetCore2/SqlSugar.MongoDbCore/MongoDb/SqlBuilder/MongoDbExpressionContext.cs +++ b/Src/Asp.NetCore2/SqlSugar.MongoDbCore/MongoDb/SqlBuilder/MongoDbExpressionContext.cs @@ -160,7 +160,7 @@ namespace SqlSugar.MongoDb public MongoNestedTranslatorContext context { get; set; } public override string ToInt32(MethodCallExpressionModel model) { - var item = model.DataObject as Expression; + var item =model.Args[0].MemberValue; BsonValue memberName = new ExpressionVisitor(context).Visit(item as Expression); var toIntDoc = new BsonDocument("$toInt", $"${memberName}"); return toIntDoc.ToJson(UtilMethods.GetJsonWriterSettings()); @@ -168,7 +168,7 @@ namespace SqlSugar.MongoDb public override string ToInt64(MethodCallExpressionModel model) { - var item = model.DataObject as Expression; + var item = model.Args[0].MemberValue; BsonValue memberName = new ExpressionVisitor(context).Visit(item as Expression); var toLongDoc = new BsonDocument("$toLong", $"${memberName}"); return toLongDoc.ToJson(UtilMethods.GetJsonWriterSettings()); @@ -176,7 +176,7 @@ namespace SqlSugar.MongoDb public override string ToGuid(MethodCallExpressionModel model) { - var item = model.DataObject as Expression; + var item = model.Args[0].MemberValue; BsonValue memberName = new ExpressionVisitor(context).Visit(item as Expression); // MongoDB 没有直接的 Guid 类型,通常以字符串存储 var toStringDoc = new BsonDocument("$toString", $"${memberName}"); @@ -185,7 +185,7 @@ namespace SqlSugar.MongoDb public override string ToDouble(MethodCallExpressionModel model) { - var item = model.DataObject as Expression; + var item = model.Args[0].MemberValue; BsonValue memberName = new ExpressionVisitor(context).Visit(item as Expression); var toDoubleDoc = new BsonDocument("$toDouble", $"${memberName}"); return toDoubleDoc.ToJson(UtilMethods.GetJsonWriterSettings()); @@ -193,7 +193,7 @@ namespace SqlSugar.MongoDb public override string ToBool(MethodCallExpressionModel model) { - var item = model.DataObject as Expression; + var item = model.Args[0].MemberValue; BsonValue memberName = new ExpressionVisitor(context).Visit(item as Expression); var toBoolDoc = new BsonDocument("$toBool", $"${memberName}"); return toBoolDoc.ToJson(UtilMethods.GetJsonWriterSettings()); @@ -201,7 +201,7 @@ namespace SqlSugar.MongoDb public override string ToDate(MethodCallExpressionModel model) { - var item = model.DataObject as Expression; + var item = model.Args[0].MemberValue; BsonValue memberName = new ExpressionVisitor(context).Visit(item as Expression); var toDateDoc = new BsonDocument("$toDate", $"${memberName}"); return toDateDoc.ToJson(UtilMethods.GetJsonWriterSettings()); @@ -209,7 +209,7 @@ namespace SqlSugar.MongoDb public override string ToTime(MethodCallExpressionModel model) { - var item = model.DataObject as Expression; + var item = model.Args[0].MemberValue; BsonValue memberName = new ExpressionVisitor(context).Visit(item as Expression); // MongoDB 没有单独的 Time 类型,通常用字符串或日期处理 var toStringDoc = new BsonDocument("$toString", $"${memberName}");