コード例 #1
0
ファイル: FilterHelper.cs プロジェクト: colin-chang/chanyi
        /// <summary>
        /// 判断过滤器对象是否为Null或空对象
        /// </summary>
        /// <param name="filter">过滤器</param>
        /// <returns></returns>
        public static bool IsObjectEmpty(IQueryFilter filter)
        {
            if (filter == null)
            {
                return(true);
            }
            if (!FilterHelper.HasNotEmptyElement(filter.GetType().GetProperties().Select(p => p.GetValue(filter)).ToArray()))
            {
                return(true);
            }

            return(false);
        }
コード例 #2
0
            public bool UsableWith(IQueryFilter filter)
            {
                if (_filter == null || filter == null)
                {
                    return(false);
                }

                // Type überprüfen
                if (_filter.GetType() != filter.GetType())
                {
                    return(false);
                }

                #region WhereClause
                if (_filter.WhereClause != filter.WhereClause)
                {
                    return(false);
                }
                #endregion

                #region Subfields
                if (_filter.SubFields != "*")
                {
                    if (filter.SubFields == "*")
                    {
                        return(false);
                    }

                    string[] subFields_o = _filter.SubFields.Split(' ');
                    string[] subFields_n = filter.SubFields.Split(' ');

                    foreach (string fn in subFields_n)
                    {
                        string shortNameN = Field.shortName(fn);
                        bool   found      = false;
                        foreach (string fo in subFields_o)
                        {
                            if (Field.shortName(fo) == shortNameN)
                            {
                                found = true;
                                break;
                            }
                        }
                        if (!found)
                        {
                            return(false);
                        }
                    }
                }
                #endregion

                #region Geometry Envelope
                if (_filter is ISpatialFilter && filter is ISpatialFilter)
                {
                    IGeometry geomN = ((ISpatialFilter)filter).Geometry;
                    IGeometry geomO = ((ISpatialFilter)_filter).Geometry;

                    if (geomN == null || geomO == null)
                    {
                        return(false);
                    }

                    if (((ISpatialFilter)_filter).SpatialRelation == spatialRelation.SpatialRelationMapEnvelopeIntersects &&
                        ((ISpatialFilter)filter).SpatialRelation == spatialRelation.SpatialRelationMapEnvelopeIntersects)
                    {
                        return(geomO.Envelope.Contains(geomN.Envelope));
                    }
                    else
                    {
                        return(SpatialAlgorithms.Algorithm.Contains(geomO, geomN));
                    }
                }
                #endregion

                return(true);
            }