コード例 #1
0
        public IQueryable <T> Filter <T>(IQueryable <T> entities, Filtering filtering, Func <Filter, string> buildWhereClauseHandler)
        {
            if (filtering.Filters.Any())
            {
                var where = new StringBuilder();

                foreach (var compositeFilter in filtering.Filters)
                {
                    var simpleWhere = new StringBuilder();
                    foreach (var filter in compositeFilter.Filters)
                    {
                        if (simpleWhere.Length > 0)
                        {
                            simpleWhere.Append(" " + ToLinqOperator(compositeFilter.Logic) + " ");
                        }

                        simpleWhere.Append(buildWhereClauseHandler(filter));
                    }

                    if (where.Length > 0)
                    {
                        where.Append(" " + ToLinqOperator(filtering.Logic) + " ");
                    }

                    if (simpleWhere.Length > 0)
                    {
                        where.Append("(" + simpleWhere.ToString() + ")");
                    }
                }

                entities = entities.Where(where.ToString());
            }

            return(entities);
        }
コード例 #2
0
        protected virtual IQueryable <TEntity> Filter(IQueryable <TEntity> entities, Filtering filtering)
        {
            if (filtering.Filters.Any())
            {
                var where = new StringBuilder();

                foreach (var compositeFilter in filtering.Filters)
                {
                    var simpleWhere = new StringBuilder();
                    foreach (var filter in compositeFilter.Filters)
                    {
                        if (simpleWhere.Length > 0)
                        {
                            simpleWhere.Append(" " + ToLinqOperator(compositeFilter.Logic) + " ");
                        }

                        simpleWhere.Append(BuildWhereClause <TEntity>(filter));
                    }

                    if (where.Length > 0)
                    {
                        where.Append(" " + ToLinqOperator(filtering.Logic) + " ");
                    }

                    if (simpleWhere.Length > 0)
                    {
                        where.Append("(" + simpleWhere + ")");
                    }
                }

                entities = entities.Where(where.ToString());
            }

            return(entities);
        }
コード例 #3
0
 public IQueryable <T> Filter <T>(IQueryable <T> entities, Filtering filtering)
 {
     return(Filter <T>(entities, filtering, BuildWhereClause <T>));
 }