mirror of
https://gitee.com/dotnetchina/SqlSugar.git
synced 2025-09-19 10:08:19 +08:00
Update mongodb
This commit is contained in:
@@ -0,0 +1,18 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq.Expressions;
|
||||
using System.Text;
|
||||
|
||||
namespace SqlSugar.MongoDb
|
||||
{
|
||||
public class AnyArgModel
|
||||
{
|
||||
public bool IsBinary { get; internal set; }
|
||||
public LambdaExpression LamdaExpression { get; internal set; }
|
||||
public Expression Left { get; internal set; }
|
||||
public Expression Right { get; internal set; }
|
||||
public ExpressionType NodeType { get; internal set; }
|
||||
public int LeftCount { get; internal set; }
|
||||
public int RightCount { get; internal set; }
|
||||
}
|
||||
}
|
@@ -122,10 +122,14 @@ namespace SqlSugar.MongoDb
|
||||
}
|
||||
else if (IsAnyMethodCall(methodCallExpression, name))
|
||||
{
|
||||
if (IsComplexAnyExpression(methodCallExpression))
|
||||
if (IsComplexAnyExpression(methodCallExpression, out AnyArgModel anyArgModel))
|
||||
{
|
||||
return HandleComplexAnyExpression(methodCallExpression);
|
||||
}
|
||||
else if (IsUnresolvableAnyExpression(anyArgModel))
|
||||
{
|
||||
return UnresolvablelexAnyExpression(methodCallExpression);
|
||||
}
|
||||
else if (IsSimpleValueListAny(methodCallExpression))
|
||||
{
|
||||
return HandleSimpleValueListAny(methodCallExpression);
|
||||
@@ -163,6 +167,12 @@ namespace SqlSugar.MongoDb
|
||||
}
|
||||
}
|
||||
|
||||
private BsonValue UnresolvablelexAnyExpression(MethodCallExpression methodCallExpression)
|
||||
{
|
||||
BsonValue bsonValue = null;
|
||||
return null;
|
||||
}
|
||||
|
||||
private BsonValue HandleSimpleValueListAny(MethodCallExpression methodCallExpression)
|
||||
{
|
||||
var memberExpression = methodCallExpression.Arguments[0] as MemberExpression;
|
||||
@@ -312,25 +322,46 @@ namespace SqlSugar.MongoDb
|
||||
return null;
|
||||
}
|
||||
|
||||
private static bool IsComplexAnyExpression(MethodCallExpression methodCallExpression)
|
||||
private static bool IsComplexAnyExpression(MethodCallExpression methodCallExpression, out AnyArgModel anyArgModel)
|
||||
{
|
||||
|
||||
anyArgModel=new AnyArgModel() { IsBinary = false };
|
||||
|
||||
if (methodCallExpression.Arguments.Count != 2)
|
||||
return false;
|
||||
|
||||
var isTwoMemeber=ExpressionTool.GetParameters(methodCallExpression.Arguments[1]).Select(s => s.Name).Distinct().Count() == 2;
|
||||
|
||||
if (!isTwoMemeber)
|
||||
{
|
||||
if (methodCallExpression.Arguments[1] is LambdaExpression la && la.Body is BinaryExpression bin)
|
||||
{
|
||||
var leftCount = ExpressionTool.GetParameters(MongoDbExpTools.RemoveConvert(bin.Left)).Count();
|
||||
var rightCount = ExpressionTool.GetParameters(MongoDbExpTools.RemoveConvert(bin.Right)).Count();
|
||||
anyArgModel.IsBinary = true;
|
||||
anyArgModel.LamdaExpression = la;
|
||||
anyArgModel.Left = MongoDbExpTools.RemoveConvert(bin.Left);
|
||||
anyArgModel.LeftCount = leftCount;
|
||||
anyArgModel.RightCount = rightCount;
|
||||
anyArgModel.Right = MongoDbExpTools.RemoveConvert(bin.Right);
|
||||
anyArgModel.NodeType = bin.NodeType;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
if (methodCallExpression.Arguments[1] is LambdaExpression l&&l.Body is BinaryExpression b)
|
||||
{
|
||||
if (MongoDbExpTools.RemoveConvert(b.Left) is MemberExpression == false||ExpressionTool.GetParameters(MongoDbExpTools.RemoveConvert(b.Left)).Count()!=1)
|
||||
{
|
||||
var leftCount = ExpressionTool.GetParameters(MongoDbExpTools.RemoveConvert(b.Left)).Count();
|
||||
var rightCount = ExpressionTool.GetParameters(MongoDbExpTools.RemoveConvert(b.Right)).Count();
|
||||
if (MongoDbExpTools.RemoveConvert(b.Left) is MemberExpression lm== false|| leftCount != 1)
|
||||
return false;
|
||||
}
|
||||
if (MongoDbExpTools.RemoveConvert(b.Right) is MemberExpression == false || ExpressionTool.GetParameters(MongoDbExpTools.RemoveConvert(b.Right)).Count() != 1)
|
||||
{
|
||||
if (MongoDbExpTools.RemoveConvert(b.Right) is MemberExpression lr== false || rightCount != 1)
|
||||
return false;
|
||||
}
|
||||
anyArgModel.IsBinary = true;
|
||||
anyArgModel.LamdaExpression = l;
|
||||
anyArgModel.Left = lm;
|
||||
anyArgModel.LeftCount = leftCount;
|
||||
anyArgModel.RightCount = rightCount;
|
||||
anyArgModel.Right = lr;
|
||||
anyArgModel.NodeType = b.NodeType;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
@@ -468,6 +499,16 @@ namespace SqlSugar.MongoDb
|
||||
return name;
|
||||
}
|
||||
|
||||
private bool IsUnresolvableAnyExpression(AnyArgModel anyArgModel)
|
||||
{
|
||||
var leftIsUn = !(anyArgModel.Left is MemberExpression) && anyArgModel.LeftCount >= 1;
|
||||
var rightIsUn = !(anyArgModel.Right is MemberExpression) && anyArgModel.LeftCount >= 1;
|
||||
if (leftIsUn|| rightIsUn)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
private static bool IsAnyMethodCall(MethodCallExpression methodCallExpression, string name)
|
||||
{
|
||||
return name == "Any" && methodCallExpression.Arguments.Count == 2;
|
||||
|
Reference in New Issue
Block a user