private void TraverseAvailableOperators(OnOperator onOperator) { Type operatorNodeType = typeof(OperatorNode); foreach (var assembly in AppDomain.CurrentDomain.GetAssemblies()) { IEnumerable <Type> operatorTypes = assembly.GetTypes().Where(type => type.IsSubclassOf(operatorNodeType)); foreach (var type in operatorTypes) { PropertyInfo operatorField = type.GetProperty("Operator"); if (operatorField != null) { object value = operatorField.GetValue(type); if (value is char) { char operatorSymbol = (char)value; onOperator(operatorSymbol, type); } } } } }
private void TraverseAvailableOperators(OnOperator onOperator) { // get the type declaration of OperatorNode Type operatorNodeType = typeof(OperatorExpressionTreeNode); // Iterate over all loaded assemblies: foreach (var assembly in AppDomain.CurrentDomain.GetAssemblies()) { // Get all types that inherit from our OperatorNode class using LINQ IEnumerable <Type> operatorTypes = assembly.GetTypes().Where(type => type.IsSubclassOf(operatorNodeType)); // Iterate over those subclasses of OperatorNode foreach (var type in operatorTypes) { // for each subclass, retrieve the Operator property PropertyInfo operatorField = type.GetProperty("OperatorChar"); if (operatorField != null) { // Get the character of the Operator object value = operatorField.GetValue(type); if (value is char) { char operatorSymbol = (char)value; // And infoke the function passed as parameter // with the operator symbol and the operator class onOperator(operatorSymbol, type); } } } } }
private string OnOperatorToSql(OnOperator oper) { switch (oper) { case OnOperator.EqualTo: return("="); case OnOperator.GreaterThan: return(">"); case OnOperator.GreatherEqualThan: return(">="); //case OnOperator.In: // return "IN"; case OnOperator.LessEqualThan: return("<="); case OnOperator.LessThan: return("<"); //case OnOperator.Like: // return "LIKE"; case OnOperator.NotEqualTo: return("!="); //case OnOperator.NotIn: // return " NOT IN"; default: throw new ArgumentException("Invalid WhereOperator"); } }
public SqlQueryBuilder OnCondition(string leftTableFieldName, OnOperator onOperator, string rightTableFieldName) { if (_joinInfo.IsNull() || _joinInfo.LeftTable.IsNull() || _joinInfo.RightTable.IsNull()) { throw new ArgumentException($"No JoinInfo have been found. The call to {nameof(OnCondition)} has been probabily made without calling {nameof(From)} or a JOIN method"); } return(OnCondition(_joinInfo.LeftTable.TableAlias, _joinInfo.LeftTable.TableName, onOperator, _joinInfo.RightTable.TableAlias, _joinInfo.RightTable.TableName)); }
/// <summary> /// This function will search for all instances of the classes that inherit from the OperatorNode /// class and add the types to the dictionary with the specified operator character key. /// </summary> /// <param name="onOperator">OnOperator.</param> private void TraverseAvailableOperators(OnOperator onOperator) { // get the type declaration of OperatorNode Type operatorNodeType = typeof(OperatorNode); // Iterate over all loaded assemblies: foreach (var assembly in AppDomain.CurrentDomain.GetAssemblies()) { // Get all types that inherit from our operatorNode class using LINQ IEnumerable <Type> operatorTypes = assembly.GetTypes() .Where(type => type.IsSubclassOf(operatorNodeType)); // Iterate over those subclasses of OperatorNode foreach (var type in operatorTypes) { // for each subclass, retrieve the Operator property PropertyInfo operatorField = type.GetProperty("Operator"); if (operatorField != null) { // Get the character of the Operator object value = operatorField.GetValue(type); // If the property is not static, use the following code instead: // object value = operatorField.GetValue(Activator.CreateInstance(type, new ConstantNode("0"), new ConstantNode("0"))); if (value is char) { char operatorSymbol = (char)value; // And invoke the function passed as parameter // With the operator symbol and the operator class onOperator(operatorSymbol, type); } } } } }
private string OnConditionImpl(string leftTableAlias, string leftTableFieldName, OnOperator onOperator, string rightTableAlias, string rightTableFieldName) { leftTableAlias.AssertHasText(nameof(leftTableAlias)); leftTableFieldName.AssertHasText(nameof(leftTableFieldName)); rightTableAlias.AssertHasText(nameof(rightTableAlias)); rightTableFieldName.AssertHasText(nameof(rightTableFieldName)); switch (onOperator) { case OnOperator.EqualTo: case OnOperator.NotEqualTo: case OnOperator.GreaterThan: case OnOperator.GreatherEqualThan: case OnOperator.LessEqualThan: case OnOperator.LessThan: return($"{leftTableAlias}.{leftTableFieldName} {OnOperatorToSql(onOperator)} {rightTableAlias}.{rightTableFieldName}"); } return(string.Empty); }
public SqlQueryBuilder OrOnCondition(string leftTableAlias, string leftTableFieldName, OnOperator onOperator, string rightTableAlias, string rightTableFieldName) { string condition = OnConditionImpl(leftTableAlias, leftTableFieldName, onOperator, rightTableAlias, rightTableFieldName); _query.Append($" OR ({condition})"); return(this); }
public SqlQueryBuilder OnCondition(string leftTableAlias, string leftTableFieldName, OnOperator onOperator, string rightTableAlias, string rightTableFieldName) { if (_joinInfo.IsNull() || _joinInfo.LeftTable.IsNull() || _joinInfo.RightTable.IsNull()) { throw new ArgumentException($"No JoinInfo have been found. The call to {nameof(OnCondition)} has been probabily made without calling {nameof(From)} or a JOIN method"); } string condition = OnConditionImpl(leftTableAlias, leftTableFieldName, onOperator, rightTableAlias, rightTableFieldName); _query.Append($" ON {condition}"); return(this); }