From 21ac096d007f6cba48d69319ec0a6fb22e4dfd0e Mon Sep 17 00:00:00 2001 From: sunkaixuan <610262374@qq.com> Date: Sat, 21 Jun 2025 10:25:11 +0800 Subject: [PATCH] Update mongodb --- .../MongoDbTest/UnitTest/QuerySelect.cs | 11 ++++-- .../VisitorItems/FieldPathExtractor.cs | 36 ++++++++++++++++--- 2 files changed, 41 insertions(+), 6 deletions(-) diff --git a/Src/Asp.NetCore2/MongoDbTest/UnitTest/QuerySelect.cs b/Src/Asp.NetCore2/MongoDbTest/UnitTest/QuerySelect.cs index 826939590..bd13a045f 100644 --- a/Src/Asp.NetCore2/MongoDbTest/UnitTest/QuerySelect.cs +++ b/Src/Asp.NetCore2/MongoDbTest/UnitTest/QuerySelect.cs @@ -159,11 +159,18 @@ namespace MongoDbTest var list17 = db.Queryable() .Where(it=>SqlFunc.Length(it.Name)>1) .Select(it => new - { + { name2=it.Name, - name = it.Name.Substring(0,1), + name = it.Name.Substring(0,1), }).ToList(); if(list17.First().name2!="a2"||list17.First().name.Substring(0,1)!= list17.First().name) Cases.ThrowUnitError(); + + var list18 = db.Queryable() + .Select(it => new + { + name = it.Name.Length, + }).ToList(); + if(list18.Max(it=>it.name)!=2) Cases.ThrowUnitError(); } [SqlSugar.SugarTable("UnitStudent1231sds3z1")] public class Student : MongoDbBase diff --git a/Src/Asp.NetCore2/SqlSugar.MongoDbCore/ExpToSql/VisitorItems/FieldPathExtractor.cs b/Src/Asp.NetCore2/SqlSugar.MongoDbCore/ExpToSql/VisitorItems/FieldPathExtractor.cs index f2cda48af..c8985fbb8 100644 --- a/Src/Asp.NetCore2/SqlSugar.MongoDbCore/ExpToSql/VisitorItems/FieldPathExtractor.cs +++ b/Src/Asp.NetCore2/SqlSugar.MongoDbCore/ExpToSql/VisitorItems/FieldPathExtractor.cs @@ -36,14 +36,22 @@ namespace SqlSugar.MongoDb if (ExpressionTool.GetParameters(expr).Count == 0) { var value = ExpressionTool.GetMemberValue(oldMember.Member, oldExp); - return UtilMethods.MyCreate(value); + return UtilMethods.MyCreate(value); } - else if (!string.IsNullOrEmpty(BinaryExpressionTranslator.GetSystemDateMemberName(expr))) + else if (IsLength(oldMember)) { - var memberExp= (expr as MemberExpression); + var memberExp = (expr as MemberExpression); var method = new MongoDbMethod() { context = _context }; var model = new MethodCallExpressionModel() { Args = new List() }; - if (memberExp.Member.Name == "Date") + model.Args.Add(new MethodCallExpressionArgs() { MemberValue = memberExp.Expression }); + return BsonDocument.Parse(method.Length(model)); + } + else if (IsDateProperty(expr)) + { + var memberExp = (expr as MemberExpression); + var method = new MongoDbMethod() { context = _context }; + var model = new MethodCallExpressionModel() { Args = new List() }; + if (memberExp.Member.Name == "Date") { model.Args.Add(new MethodCallExpressionArgs() { MemberValue = memberExp.Expression }); return BsonDocument.Parse(method.ToDateShort(model)); @@ -58,6 +66,26 @@ namespace SqlSugar.MongoDb return ExtractFieldPath(expr); } + private static bool IsDateProperty(Expression expr) + { + return !string.IsNullOrEmpty(BinaryExpressionTranslator.GetSystemDateMemberName(expr)); + } + + private static bool IsLength(MemberExpression oldMember) + { + if (oldMember.Member.Name != "Length") + return false; + + var expressionType = oldMember.Expression?.Type; + if (expressionType == null) + return false; + + return expressionType.IsArray + || expressionType == typeof(string) + || expressionType.FullName == "System.Span`1" + || expressionType.FullName == "System.ReadOnlySpan`1"; + } + private BsonValue ExtractFieldPath(Expression expr) { var parts = new Stack();