mirror of
https://gitee.com/dotnetchina/SqlSugar.git
synced 2025-09-19 01:58:13 +08:00
Update mongodb
This commit is contained in:
@@ -8,65 +8,74 @@ using System.Text;
|
||||
namespace SqlSugar.MongoDb
|
||||
{
|
||||
public partial class BinaryExpressionTranslator
|
||||
{
|
||||
{
|
||||
private BsonDocument GetComparisonOperation(BinaryExpression expr, BsonValue field, BsonValue value, bool leftIsMember, bool rightIsMember, string op)
|
||||
{
|
||||
string leftValue = "";
|
||||
BsonValue rightValue = "";
|
||||
if (IsLeftValue(leftIsMember, rightIsMember, op) || IsRightValue(leftIsMember, rightIsMember, op))
|
||||
var isLeftValue = IsLeftValue(leftIsMember, rightIsMember, op);
|
||||
var isRightValue = IsRightValue(leftIsMember, rightIsMember, op);
|
||||
var isKeyValue = isLeftValue || isRightValue;
|
||||
if (isKeyValue)
|
||||
return ComparisonKeyValue(expr, field, value, op, isLeftValue);
|
||||
else
|
||||
return ComparisonNotKeyValue(field, value, op);
|
||||
}
|
||||
|
||||
private static BsonDocument ComparisonNotKeyValue(BsonValue field, BsonValue value, string op)
|
||||
{
|
||||
var leftKey = field.ToString();
|
||||
return new BsonDocument
|
||||
{
|
||||
{ leftKey, new BsonDocument { { op, value } } }
|
||||
};
|
||||
}
|
||||
|
||||
private BsonDocument ComparisonKeyValue(BinaryExpression expr, BsonValue field, BsonValue value, string op, bool isLeftValue)
|
||||
{
|
||||
string leftValue = string.Empty;
|
||||
BsonValue rightValue = null;
|
||||
MemberExpression expression;
|
||||
if (isLeftValue)
|
||||
{
|
||||
MemberExpression expression;
|
||||
if (IsLeftValue(leftIsMember, rightIsMember, op))
|
||||
leftValue = field.ToString();
|
||||
rightValue = value;
|
||||
expression = expr.Left as MemberExpression;
|
||||
}
|
||||
else
|
||||
{
|
||||
leftValue = value.ToString();
|
||||
rightValue = field;
|
||||
expression = expr.Right as MemberExpression;
|
||||
}
|
||||
if (expression != null)
|
||||
{
|
||||
if (expression.Expression is ParameterExpression parameter)
|
||||
{
|
||||
leftValue = field.ToString();
|
||||
rightValue = value;
|
||||
expression = expr.Left as MemberExpression;
|
||||
}
|
||||
else
|
||||
{
|
||||
leftValue = value.ToString();
|
||||
rightValue = field;
|
||||
expression = expr.Right as MemberExpression;
|
||||
}
|
||||
if (expression != null)
|
||||
{
|
||||
if (expression.Expression is ParameterExpression parameter)
|
||||
if (_context?.context != null)
|
||||
{
|
||||
if (_context?.context != null)
|
||||
var entityInfo = _context.context.EntityMaintenance.GetEntityInfo(parameter.Type);
|
||||
var columnInfo = entityInfo.Columns.FirstOrDefault(s => s.PropertyName == leftValue || s.DbColumnName == leftValue);
|
||||
if (columnInfo != null)
|
||||
{
|
||||
var entityInfo = _context.context.EntityMaintenance.GetEntityInfo(parameter.Type);
|
||||
var columnInfo = entityInfo.Columns.FirstOrDefault(s => s.PropertyName == leftValue || s.DbColumnName == leftValue);
|
||||
if (columnInfo != null)
|
||||
leftValue = columnInfo.DbColumnName;
|
||||
if (columnInfo.IsPrimarykey)
|
||||
{
|
||||
leftValue = columnInfo.DbColumnName;
|
||||
if (columnInfo.IsPrimarykey)
|
||||
{
|
||||
rightValue = BsonValue.Create(ObjectId.Parse(value + ""));
|
||||
}
|
||||
rightValue = BsonValue.Create(ObjectId.Parse(value + ""));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (op == "$eq")
|
||||
{
|
||||
return new BsonDocument { { leftValue, rightValue } };
|
||||
}
|
||||
else
|
||||
{
|
||||
return new BsonDocument
|
||||
{
|
||||
{ leftValue, new BsonDocument { { op, rightValue } } }
|
||||
};
|
||||
}
|
||||
}
|
||||
if (op == "$eq")
|
||||
{
|
||||
return new BsonDocument { { leftValue, rightValue } };
|
||||
}
|
||||
else
|
||||
{
|
||||
return new BsonDocument
|
||||
{
|
||||
{ field.ToString(), new BsonDocument { { op, value } } }
|
||||
{ leftValue, new BsonDocument { { op, rightValue } } }
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
@@ -472,7 +472,16 @@ namespace SqlSugar.MongoDb
|
||||
}
|
||||
return dic;
|
||||
}
|
||||
|
||||
internal static BsonValue GetBsonValue(bool isMember, BsonValue field,bool isId)
|
||||
{
|
||||
if (!isMember && isId)
|
||||
{
|
||||
return ObjectId.Parse(field?.ToString());
|
||||
}
|
||||
if (isMember) return field.ToString();
|
||||
else
|
||||
return field;
|
||||
}
|
||||
internal static BsonValue GetBsonValue(bool isMember, BsonValue field)
|
||||
{
|
||||
if (isMember) return "$" + field;
|
||||
|
Reference in New Issue
Block a user