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)); }
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); })); }