public static string GetWhere(PgTVM.IPgTableViewFilterM iFilter, List <IParams> listParams)
        {
            if (iFilter == null)
            {
                return("1 = 1");
            }
            else
            {
                if (iFilter is PgTVM.PgTableViewFilterM && FilterHasError(iFilter))
                {
                    return("1 = 1");
                }
                else if (iFilter is PgTVM.PgTableViewFiltersM)
                {
                    PgTVM.PgTableViewFiltersM container = iFilter as PgTVM.PgTableViewFiltersM;
                    if (container.Container.Count == 0 || FilterHasError(iFilter))
                    {
                        return("1=1");
                    }
                }
            }

            switch (iFilter.Type)
            {
            case PgTVM.PgTableViewFilterType.Filter:
            {
                var filter = iFilter as PgTVM.PgTableViewFilterM;
                if (filter == null)
                {
                    break;
                }
                if (filter.CheckHasError())
                {
                    if (filter.UseOwnValue)
                    {
                        return(null);
                    }
                    else
                    {
                        throw new Exception();
                    }
                }
                var param = GetWhereParams(filter, listParams.Count + 1);
                listParams.Add(param);
                return(GetWhereFilter(filter, param));
            }

            case PgTVM.PgTableViewFilterType.Container:
            {
                var filters = iFilter as PgTVM.PgTableViewFiltersM;
                if (filters == null)
                {
                    break;
                }
                return(GetWhereContainer(filters, listParams));
            }
            }
            throw new Exception("Ошибка при выборе фильтра");
        }
        /// <summary>
        /// Получает FilterRelationModel из фильтра
        /// </summary>
        /// <param name="iFilter"></param>
        /// <returns></returns>
        private FilterRelationModel GetFilterModel(PgTVM.IPgTableViewFilterM iFilter)
        {
            switch (iFilter.Type)
            {
            case PgTVM.PgTableViewFilterType.Filter:
            {
                var filter = iFilter as PgTVM.PgTableViewFilterM;
                if (filter == null)
                {
                    break;
                }
                //if (filter.CheckHasError())
                //    return null;
                return(new FilterRelationModel()
                    {
                        Type = TypeRelation.ELEMENT,
                        Element = new FilterElementModel()
                        {
                            Column = filter.Field.Name,
                            Type = filter.TOperation,
                            Value = ((filter.Value == null)
                                            ? String.Empty
                                            : filter.Value.ToString())
                        }
                    });
            }

            case PgTVM.PgTableViewFilterType.Container:
            {
                var filters = iFilter as PgTVM.PgTableViewFiltersM;
                if (filters == null)
                {
                    break;
                }
                return(GetFilterModelContainer(filters));
            }
            }
            throw new Exception("Ошибка при выборе фильтра");
        }
 public static bool FilterHasError(PgTVM.IPgTableViewFilterM iFilter)
 {
     if (iFilter is PgTVM.PgTableViewFilterM)
     {
         PgTVM.PgTableViewFilterM filter = iFilter as PgTVM.PgTableViewFilterM;
         return(filter.HasError);
     }
     else if (iFilter is PgTVM.PgTableViewFiltersM)
     {
         PgTVM.PgTableViewFiltersM container = iFilter as PgTVM.PgTableViewFiltersM;
         bool result = false;
         foreach (PgTVM.IPgTableViewFilterM innerIFilter in container.Container)
         {
             result |= FilterHasError(innerIFilter);
         }
         return(result);
     }
     else
     {
         return(false);
     }
 }
        /// <summary>
        /// Устанавливает активный фильтр из FilterRelationModel
        /// </summary>
        /// <param name="iFilter"></param>
        /// <param name="pattern"></param>
        public void SetFilterFromPattern(PgTVM.IPgTableViewFilterM iFilter, FilterRelationModel pattern)
        {
            switch (pattern.Type)
            {
            case TypeRelation.AND:
            case TypeRelation.OR:
            {
                PgTVM.PgTableViewFiltersM container = iFilter as PgTVM.PgTableViewFiltersM;

                container.Container.Clear();
                container.TRelation = pattern.Type;
                foreach (FilterRelationModel relM in pattern.Arguments)
                {
                    if (relM.Type == TypeRelation.ELEMENT)
                    {
                        PgTVM.PgTableViewFilterM innerelement = new PgTVM.PgTableViewFilterM(container, false);
                        container.Container.Add(innerelement);
                        SetFilterFromPattern(innerelement, relM);
                    }
                    else
                    {
                        PgTVM.PgTableViewFiltersM innercontainer = new PgTVM.PgTableViewFiltersM(container, false);
                        container.Container.Add(innercontainer);
                        SetFilterFromPattern(innercontainer, relM);
                    }
                }
                break;
            }

            case TypeRelation.ELEMENT:
            {
                PgTVM.PgTableViewFilterM element = (PgTVM.PgTableViewFilterM)iFilter;
                element.Field      = element.Source.FindField(pattern.Element.Column);
                element.TOperation = pattern.Element.Type;
                element.Value      = pattern.Element.Value;
                break;
            }
            }
        }