Beispiel #1
0
 public static IEnumerable <IColumnConfig> GetColumns(this IFragmentContainer container)
 {
     return(container
            .Flatten <IColumnBuilder>()
            .Select(expression => expression.Column)
            .Distinct());
 }
Beispiel #2
0
        public static IEnumerable <T> Flatten <T>(this IFragmentContainer container) where T : IFragmentBuilder
        {
            var result = new HashSet <T>();
            var stack  = new Stack <IFragmentContainer>();

            stack.Push(container);
            while (stack.Count > 0)
            {
                container = stack.Pop();
                if (container is T)
                {
                    result.Add((T)container);
                }
                foreach (var expression in container.Expressions)
                {
                    if (expression is T)
                    {
                        result.Add((T)expression);
                    }
                    if (expression is IFragmentContainer)
                    {
                        stack.Push((IFragmentContainer)expression);
                    }
                }
            }
            return(result);
        }
Beispiel #3
0
        public static TResult GetOppositeExpression <T, TResult>(this IFragmentContainer container, Predicate <T> predicate) where T : IFragmentBuilder
        {
            var expressions = container.Flatten <IBinaryExpressionBuilder>();

            foreach (var binary in expressions)
            {
                if (binary.Left is T && predicate((T)binary.Left) && binary.Right is TResult)
                {
                    return((TResult)binary.Right);
                }
                if (binary.Right is T && predicate((T)binary.Right) && binary.Left is TResult)
                {
                    return((TResult)binary.Left);
                }
            }
            return(default(TResult));
        }
Beispiel #4
0
 public TaskAwaiter(IFragmentContainer fragmentContainer)
 {
     _container = fragmentContainer;
 }
Beispiel #5
0
 public static IEnumerable <IExpressionBuilder> GetExpressions(IFragmentContainer container)
 {
     return(container.GetExpressions <IFunctionBuilder>(function => function.Function == QueryFunction.Exists));
 }
Beispiel #6
0
 public static IEnumerable <T> GetExpressions <T>(this IFragmentContainer container, Func <T, bool> predicate) where T : IFragmentBuilder
 {
     return(container.Expressions.OfType <T>().Where(predicate));
 }
Beispiel #7
0
 public static T GetExpression <T>(this IFragmentContainer container, Func <T, bool> predicate) where T : IFragmentBuilder
 {
     return(container.Expressions.OfType <T>().FirstOrDefault(predicate));
 }
Beispiel #8
0
 public static T GetExpression <T>(this IFragmentContainer container) where T : IFragmentBuilder
 {
     return(container.Expressions.OfType <T>().FirstOrDefault());
 }
Beispiel #9
0
 public static IDictionary <ITableConfig, IList <IColumnConfig> > GetColumnMap(this IFragmentContainer container)
 {
     return(container
            .Flatten <IColumnBuilder>()
            .GroupBy(expression => expression.Column.Table)
            .ToDictionary(group => group.Key, group => (IList <IColumnConfig>)group.Select(expression => expression.Column).ToList()));
 }