예제 #1
0
        private string GetOrFilter(OrAlsoExpression or)
        {
            StringBuilder filterLeft = new StringBuilder();

            if (or.Left is WhereExpression)
            {
                filterLeft.AppendLine(GetAndFilter((WhereExpression)or.Left));
            }
            else
            {
                filterLeft.AppendLine(GetOrFilter((OrAlsoExpression)or.Left));
            }
            StringBuilder filterRight = new StringBuilder();

            if (or.Right is WhereExpression)
            {
                filterRight.AppendLine(GetAndFilter((WhereExpression)or.Right));
            }
            else
            {
                filterRight.AppendLine(GetOrFilter((OrAlsoExpression)or.Right));
            }
            return(string.Format("({0}) OR ({1})", filterLeft, filterRight));
        }
예제 #2
0
        private Func <T, bool> GetOrFilter(OrAlsoExpression or)
        {
            Func <T, bool> filterLeft;

            if (or.Left is WhereExpression)
            {
                filterLeft = GetAndFilter((WhereExpression)or.Left);
            }
            else
            {
                filterLeft = GetOrFilter((OrAlsoExpression)or.Left);
            }
            Func <T, bool> filterRight;

            if (or.Right is WhereExpression)
            {
                filterRight = GetAndFilter((WhereExpression)or.Right);
            }
            else
            {
                filterRight = GetOrFilter((OrAlsoExpression)or.Right);
            }
            return(new Func <T, bool>((target) => { return filterLeft(target) | filterRight(target); }));
        }