mirror of
https://gitee.com/dotnetchina/SqlSugar.git
synced 2025-09-19 01:58:13 +08:00
Update mongodb
This commit is contained in:
@@ -22,12 +22,31 @@ namespace SqlSugar.MongoDb
|
||||
|
||||
public BsonDocument Extract(BinaryExpression expr)
|
||||
{
|
||||
if (IsLogicalExpression(expr))
|
||||
if (IsValidJsonEqualityExpression(expr))
|
||||
return JsonEqualityExpression(expr);
|
||||
else if (IsLogicalExpression(expr))
|
||||
return LogicalBinaryExpression(expr);
|
||||
else
|
||||
return FieldComparisonOrCalculationExpression(expr);
|
||||
}
|
||||
|
||||
private BsonDocument JsonEqualityExpression(BinaryExpression expr)
|
||||
{
|
||||
var fieldName = new ExpressionVisitor(_context).Visit(expr.Left);
|
||||
|
||||
// 步骤3:获取右侧常量值
|
||||
object rightValue = ExpressionTool.DynamicInvoke(expr.Right);
|
||||
|
||||
var builder=InstanceFactory.GetInsertBuilder(this._context.context.CurrentConnectionConfig);
|
||||
var json=builder.SerializeObjectFunc(rightValue);
|
||||
return new BsonDocument(fieldName+"",UtilMethods.ParseJsonObject(json));
|
||||
}
|
||||
|
||||
private bool IsValidJsonEqualityExpression(BinaryExpression expr)
|
||||
{
|
||||
return this._context?.context != null && expr.NodeType == ExpressionType.Equal && UtilMethods.IsJsonMember(expr.Left, this._context?.context) && ExpressionTool.GetParameters(expr.Right).Count == 0;
|
||||
}
|
||||
|
||||
private static bool IsLogicalExpression(BinaryExpression expr)
|
||||
{
|
||||
return expr.NodeType == ExpressionType.AndAlso || expr.NodeType == ExpressionType.OrElse;
|
||||
|
@@ -21,6 +21,19 @@ namespace SqlSugar.MongoDb
|
||||
{
|
||||
public class UtilMethods
|
||||
{
|
||||
internal static bool IsJsonMember(Expression expression, SqlSugarProvider context)
|
||||
{
|
||||
var member = expression as MemberExpression;
|
||||
if (member == null)
|
||||
return false;
|
||||
if (!(member.Type.IsClass())||member.Type==typeof(string))
|
||||
return false;
|
||||
if (member.Expression == null)
|
||||
return false;
|
||||
var entity = context.EntityMaintenance.GetEntityInfo(member.Expression.Type);
|
||||
var json = entity.Columns.FirstOrDefault(z => z.IsJson && z.PropertyName == member.Member.Name);
|
||||
return json != null;
|
||||
}
|
||||
internal static SugarParameter GetParameterConverter(int index, ISqlSugarClient db, object value, Expression oppoSiteExpression, EntityColumnInfo columnInfo)
|
||||
{
|
||||
var entity = db.EntityMaintenance.GetEntityInfo(oppoSiteExpression.Type);
|
||||
|
Reference in New Issue
Block a user