本文整理汇总了C#中System.Linq.Expressions.BinaryExpression类的典型用法代码示例。如果您正苦于以下问题:C# BinaryExpression类的具体用法?C# BinaryExpression怎么用?C# BinaryExpression使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
BinaryExpression类属于System.Linq.Expressions命名空间,在下文中一共展示了BinaryExpression类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: CheckShortCircuitAnd
private static bool CheckShortCircuitAnd(BinaryExpression expression, StringBuilder queryBuilder, Action<Expression> visitExpression)
{
if (expression.NodeType == ExpressionType.And || expression.NodeType == ExpressionType.AndAlso)
{
var ceLeft = expression.Left as ConstantExpression;
var ceRight = expression.Right as ConstantExpression;
if (ceLeft != null && ceLeft.Type == typeof(bool))
{
if ((bool)ceLeft.Value)
visitExpression(expression.Right);
else
queryBuilder.Append("false ");
return true;
}
else if (ceRight != null && ceRight.Type == typeof(bool))
{
if ((bool)ceRight.Value)
visitExpression(expression.Left);
else
queryBuilder.Append("false ");
return true;
}
}
return false;
}
示例2: CheckShortCircuitOr
private static bool CheckShortCircuitOr(BinaryExpression expression, StringBuilder queryBuilder, Action<Expression> visitExpression)
{
if (expression.NodeType == ExpressionType.Or || expression.NodeType == ExpressionType.OrElse)
{
var ceLeft = expression.Left as ConstantExpression;
var ceRight = expression.Right as ConstantExpression;
if (ceLeft != null && (ceLeft.Type == typeof(bool) || ceLeft.Type == typeof(bool?)))
{
if (true.Equals(ceLeft.Value))
queryBuilder.Append("true ");
else
visitExpression(expression.Right);
return true;
}
else if (ceRight != null && (ceRight.Type == typeof(bool) || ceRight.Type == typeof(bool?)))
{
if (true.Equals(ceRight.Value))
queryBuilder.Append("true ");
else
visitExpression(expression.Left);
return true;
}
}
return false;
}
示例3: VisitBinary
protected override Expression VisitBinary(BinaryExpression binaryExpr)
{
ResourceProperty resourceProperty = null;
object obj = null;
if (!ExpressionHelper.ContainsComparisonOperator(binaryExpr))
{
if (!ExpressionHelper.ContainsLogicalOperator(binaryExpr))
{
this.IsCompleteExpressionParsed = false;
}
}
else
{
if (!ExpressionHelper.GetPropertyNameAndValue(binaryExpr, out resourceProperty, out obj))
{
TraceHelper.Current.DebugMessage("Expression is too complex to execute");
this.IsCompleteExpressionParsed = false;
}
else
{
this.FilterProperties.Add(new KeyValuePair<ResourceProperty, object>(resourceProperty, obj));
}
}
return base.VisitBinary(binaryExpr);
}
示例4: VisitBinary
protected List<Microsoft.Z3.BoolExpr> VisitBinary(BinaryExpression b)
{
// Use recursion to generate Z3 constraints for each operand of the binary expression
// left side -> create a Z3 expression representing the left side
Expression left = Visit(b.Left);
// right side -> creat a Z3 expression representing the right side
Expression right = Visit(b.Right);
// Put those into a Z3 format
ExpressionType op = b.NodeType;
using (Context ctx = new Context())
{
if (op == ExpressionType.LessThan)
{
// ctx.MkLt(left, right);
}
}
Console.WriteLine(b.ToString());
// TODO - return a Z3 expression
return null;
}
示例5: GetValueFromEqualsExpression
internal static string GetValueFromEqualsExpression(BinaryExpression be, Type memberDeclaringType, string memberName)
{
if (be.NodeType != ExpressionType.Equal)
throw new Exception("There is a bug in this program.");
if (be.Left.NodeType == ExpressionType.MemberAccess)
{
MemberExpression me = (MemberExpression)be.Left;
if (IsSameTypeOrSubType(me.Member.DeclaringType, memberDeclaringType) && me.Member.Name == memberName)
{
return GetValueFromExpression(be.Right);
}
}
else if (be.Right.NodeType == ExpressionType.MemberAccess)
{
MemberExpression me = (MemberExpression)be.Right;
if (IsSameTypeOrSubType(me.Member.DeclaringType, memberDeclaringType) && me.Member.Name == memberName)
{
return GetValueFromExpression(be.Left);
}
}
// We should have returned by now.
throw new Exception("There is a bug in this program.");
}
示例6: ValidateConjunctiveExpression
/// <summary>
/// Validates whether the binary expression is valid AND / OR expression.
/// </summary>
/// <param name="binaryExpression">Binary conjuctive expression.</param>
public static void ValidateConjunctiveExpression(BinaryExpression binaryExpression)
{
Utils.ThrowIfNull(binaryExpression, "binaryExpression");
ExpressionHelper.ValidateConjuctiveNode(binaryExpression.Left);
ExpressionHelper.ValidateConjuctiveNode(binaryExpression.Right);
}
示例7: SimpleProduct
static Expression SimpleProduct(Expression left, Expression right, BinaryExpression product)
{
// ensure "left" is no quotient
if(left.NodeType == ExpressionType.Divide)
{
BinaryExpression leftQuotient = (BinaryExpression)left;
Expression nominator = SimpleProduct(right, leftQuotient.Left, null);
return SimpleQuotient(nominator, leftQuotient.Right, null);
}
// ensure "right" is no quotient
if(right.NodeType == ExpressionType.Divide)
{
BinaryExpression rightQuotient = (BinaryExpression)right;
Expression nominator = SimpleProduct(left, rightQuotient.Left, null);
return SimpleQuotient(nominator, rightQuotient.Right, null);
}
// ensure "right" is no product
while(right.NodeType == ExpressionType.Multiply)
{
BinaryExpression rightProduct = (BinaryExpression)right;
left = Expression.Multiply(left, rightProduct.Right);
right = rightProduct.Left;
}
if((product == null) || (left != product.Left) || (right != product.Right))
{
return Expression.Multiply(left, right);
}
return product;
}
示例8: VisitBinary
protected override Expression VisitBinary(BinaryExpression node)
{
switch(node.NodeType) {
case ExpressionType.Equal:
case ExpressionType.NotEqual:
if(_model.IsEntity(node.Left.Type) || _model.IsEntity(node.Right.Type)) {
//visit children and replace with EntitiesEqual
var newLeft = Visit(node.Left);
var newRight = Visit(node.Right);
var method = node.NodeType == ExpressionType.Equal ? EntityCacheHelper.EntitiesEqualMethod : EntityCacheHelper.EntitiesNotEqualMethod;
return Expression.Call(null, method, newLeft, newRight);
}//if
// compare both args, to cover expr like 'p.Name == null'
if (node.Left.Type == typeof(string) && node.Right.Type == typeof(string) && _caseMode == StringCaseMode.CaseInsensitive) {
var baseLeft = base.Visit(node.Left);
var baseRight = base.Visit(node.Right);
Expression result = Expression.Call(EntityCacheHelper.StringStaticEquals3Method,
baseLeft, baseRight, EntityCacheHelper.ConstInvariantCultureIgnoreCase);
if (node.NodeType == ExpressionType.NotEqual)
result = Expression.Not(result);
return result;
}
break;
}//switch
return base.VisitBinary(node);
}
示例9: VisitBinary
protected override Expression VisitBinary(BinaryExpression node)
{
string operatorName;
if (node.Method == null)
{
operatorName = string.Format(" {0} ", node.NodeType.GetName());
}
else
{
// VisitBinary should be called only for operators but its possible
// that we don't know this special C# operators name
var name = TypeNameConverter.GetCSharpOperatorName(node.Method);
if (name != null)
operatorName = string.Format(" {0} ", name);
else
operatorName = node.Method.Name;
}
// BinaryExpression consists of 3 parts: left operator right
_rep = string.Format("{0}{1}{2}",
Print(node.Left),
operatorName,
Print(node.Right));
if (!_isHighLevel)
_rep = string.Format("({0})", _rep);
return node;
}
示例10: VisitBinary
protected override Expression VisitBinary(BinaryExpression node)
{
var relation = string.Empty;
switch (node.NodeType)
{
case ExpressionType.Equal:
relation = " = ";
break;
case ExpressionType.NotEqual:
relation = " <> ";
break;
case ExpressionType.GreaterThan:
relation = " > ";
break;
case ExpressionType.GreaterThanOrEqual:
relation = " >= ";
break;
case ExpressionType.LessThan:
relation = " < ";
break;
case ExpressionType.LessThanOrEqual:
relation = " <= ";
break;
case ExpressionType.Add:
relation = " + ";
break;
case ExpressionType.Subtract:
relation = " - ";
break;
default:
break;
}
this.Condition = GetRelationCondition(relation, node);
return node;
}
示例11: PrintNode
private static void PrintNode(BinaryExpression expression,
int indent)
{
PrintNode(expression.Left, indent + 1);
PrintSingle(expression, indent);
PrintNode(expression.Right, indent + 1);
}
示例12: VisitBinary
protected override Expression VisitBinary(BinaryExpression b)
{
b = base.VisitBinary(b) as BinaryExpression;
switch (b.NodeType)
{
case ExpressionType.Add:
case ExpressionType.AddChecked:
if (b.Left.Type.Equals(typeof(String)))
return Expression.Call(MethodRepository.Concat, Expression.NewArrayInit(Types.String, b.Left, Expressor.ToString(b.Right)));
if (b.Right.Type.Equals(typeof(String)))
return Expression.Call(MethodRepository.Concat, Expression.NewArrayInit(Types.String, Expressor.ToString(b.Left), b.Right));
return b;
case ExpressionType.ArrayIndex:
if (b.Type == Types.Byte)
{
}
return b;
case ExpressionType.Equal:
case ExpressionType.NotEqual:
default:
return b;
}
}
示例13: VisitBinary
protected override Expression VisitBinary(BinaryExpression binaryExpression)
{
var nodeType = binaryExpression.NodeType;
if (nodeType == ExpressionType.Equal || nodeType == ExpressionType.NotEqual)
{
var left = this.Visit(binaryExpression.Left).StripAndGetConstant();
var right = this.Visit(binaryExpression.Right).StripAndGetConstant();
if (left != null && right != null)
{
if (left.Value == null && right.Value == null)
{
return Expression.Constant(true);
}
if (left.Value == null || right.Value == null)
{
return Expression.Constant(false);
}
}
if (left != null && left.Value == null)
{
return new SqlFunctionCallExpression(binaryExpression.Type, nodeType == ExpressionType.Equal ? SqlFunction.IsNull : SqlFunction.IsNotNull, binaryExpression.Right);
}
else if (right != null && right.Value == null)
{
return new SqlFunctionCallExpression(binaryExpression.Type, nodeType == ExpressionType.Equal ? SqlFunction.IsNull : SqlFunction.IsNotNull, binaryExpression.Left);
}
}
return base.VisitBinary(binaryExpression);
}
示例14: VisitBinary
protected override Expression VisitBinary(BinaryExpression binaryExpression)
{
var left = this.Visit(binaryExpression.Left);
var right = this.Visit(binaryExpression.Right);
if (left.Type.GetUnwrappedNullableType().IsEnum)
{
if (!right.Type.GetUnwrappedNullableType().IsEnum)
{
right = Expression.Convert(Expression.Call(null, MethodInfoFastRef.EnumToObjectMethod, Expression.Constant(left.Type.GetUnwrappedNullableType()), Expression.Convert(right, typeof(int))), left.Type);
}
}
else if (right.Type.GetUnwrappedNullableType().IsEnum)
{
if (!left.Type.GetUnwrappedNullableType().IsEnum)
{
left = Expression.Convert(Expression.Call(null, MethodInfoFastRef.EnumToObjectMethod, Expression.Constant(right.Type.GetUnwrappedNullableType()), Expression.Convert(left, typeof(int))), right.Type);
}
}
if (left != binaryExpression.Left || right != binaryExpression.Right)
{
return Expression.MakeBinary(binaryExpression.NodeType, left, right);
}
return binaryExpression;
}
示例15: VisitBinary
protected override Expression VisitBinary(BinaryExpression binaryExpression)
{
if (binaryExpression.NodeType == ExpressionType.Or
|| binaryExpression.NodeType == ExpressionType.And
|| binaryExpression.NodeType == ExpressionType.OrElse
|| binaryExpression.NodeType == ExpressionType.AndAlso
&& binaryExpression.Type.GetUnwrappedNullableType() == typeof(bool))
{
var left = this.Visit(binaryExpression.Left);
var right = this.Visit(binaryExpression.Right);
if (left.Type.GetUnwrappedNullableType() == typeof(bool) && (left is BitBooleanExpression))
{
left = Expression.Equal(left, Expression.Constant(true));
}
if (right.Type.GetUnwrappedNullableType() == typeof(bool) && (right is BitBooleanExpression))
{
right = Expression.Equal(right, Expression.Constant(false));
}
if (left != binaryExpression.Left || right != binaryExpression.Right)
{
return Expression.MakeBinary(binaryExpression.NodeType, left, right);
}
}
return base.VisitBinary(binaryExpression);
}