public static ITranslation For(BinaryExpression binary, ITranslationContext context) { switch (binary.NodeType) { case Add: if (binary.Type != typeof(string)) { break; } var operands = new[] { binary.Left, binary.Right }; return(new StringConcatenationTranslation(Add, operands, context)); case Equal: case NotEqual: if (StandaloneEqualityComparisonTranslation.TryGetTranslation(binary, context, out var translation)) { return(translation); } break; } return(new BinaryTranslation(binary, context)); }
public static bool TryGetTranslation(BinaryExpression comparison, ITranslationContext context, out ITranslation translation) { if (IsBooleanConstant(comparison.Right)) { translation = new StandaloneEqualityComparisonTranslation( comparison.NodeType, comparison.Left, comparison.NodeType, comparison.Right, context); return(true); } if (IsBooleanConstant(comparison.Left)) { translation = new StandaloneEqualityComparisonTranslation( comparison.NodeType, comparison.Right, comparison.NodeType, comparison.Left, context); return(true); } translation = null; return(false); }