示例#1
0
        public override FactBaseQuery GetQuery(Taxonomy taxonomy, Hierarchy <XbrlIdentifiable> currentfilter, FactBaseQuery parent)
        {
            //Console.WriteLine(String.Format("TypedDimensionFilter.GetQuery( {0} ) ", currentfilter.Item));

            var query     = new FactBaseQuery();
            var factparts = taxonomy.FactParts;

            var typeddomain = taxonomy.FindDimensionDomain(this.Dimension.QName.Content);

            // var td = taxonomy.TypedDimensions.FirstOrDefault(i => i.Key.EndsWith(":" + this.Dimension.QName.Value));
            var domainpart = typeddomain.Namespace + ":" + typeddomain.Name;
            var tag        = String.Format("[{0}:{1}]{2}", this.Dimension.QName.Domain, this.Dimension.QName.Value, domainpart);

            if (!Complement)
            {
                //var tag = String.Format(":{0}]", this.Dimension.QName.Value);

                query.TrueFilters = query.TrueFilters + String.Format("{0}, ", tag);
                if (factparts.ContainsKey(tag))
                {
                    query.DictFilterIndexes.Add(factparts[tag]);
                }
            }
            else
            {
                //var tag = String.Format(":{0}]", this.Dimension.QName.Value);

                query.FalseFilters = query.FalseFilters + String.Format("{0} ", tag);
                if (factparts.ContainsKey(tag))
                {
                    query.NegativeDictFilterIndexes.Add(factparts[tag]);
                }
            }

            SetCover(query);

            return(query);
        }