コード例 #1
0
        /// <summary>
        /// 设置查询主表,并筛选出已贴入指定标签项的数据
        /// </summary>
        /// <param name="tableName">数据表名</param>
        /// <param name="matchType">匹配方式 EnumTagSearch</param>
        /// <param name="tagIDs">标签项ID列表</param>
        public SYSTagSearchBO CreateSearch(string tableName, EnumSYSTagSearch matchType, params long[] tagIDs)
        {
            var bo = new SYSTagSearchBO(tableName, matchType, tagIDs);

            bo.DependOn(this.Context);
            return(bo);
        }
コード例 #2
0
        /// <summary>
        /// 设置查询主表,并筛选出已贴入指定标签项的数据
        /// </summary>
        /// <param name="systemID">单位ID</param>
        /// <param name="tableName">数据表名</param>
        /// <param name="matchType">匹配方式 EnumTagSearch</param>
        /// <param name="tagIDs">标签项ID列表</param>
        internal SYSTagSearchBO(long systemID, string tableName, EnumSYSTagSearch matchType, params long[] tagIDs)
        {
            this.systemID = systemID;
            if (string.IsNullOrEmpty(tableName))
            {
                throw new ArgumentOutOfRangeException("tableName");
            }
            srcTable.Add(tableName);
            strTable.AppendFormat(SYSTagSearchSql.TableNameSql, tableName, srcTable.Count);

            if (tagIDs != null && tagIDs.Length > 0)
            {
                switch (matchType)
                {
                case EnumSYSTagSearch.Fuzzy:
                    //使用OR
                    strWhere.AppendFormat(SYSTagSearchSql.InSql,
                                          srcTable.Count, this.Context.Resolve <SYSTagApplyBO>().GetTargetObjectIDByTargetIDAndTagIDs(this.Context.Resolve <SYSTagTargetBO>()[tableName].ID.Value, tagIDs.ToArray()));
                    break;

                case EnumSYSTagSearch.Smart:
                    //使用AND+OR
                    int tagClassCount = 0;
                    strTable.AppendFormat(SYSTagSearchSql.InnerJoinSql,
                                          srcTable.Count, this.Context.Resolve <SYSTagApplyBO>().GetTargetObjectIDWithGroupByTargetIDAndTagIDs(this.Context.Resolve <SYSTagTargetBO>()[tableName].ID.Value, tagIDs.ToArray(), out tagClassCount));
                    strWhere.Append(string.Format(SYSTagSearchSql.MatchRateEqualsSql, tagClassCount));
                    //strOrder.AppendFormat("tApply.[MatchRate] desc,t{0}.[ID] desc", srcTable.Count);
                    break;

                case EnumSYSTagSearch.Exact:
                    //使用AND
                    strTable.AppendFormat(SYSTagSearchSql.InnerJoinSql,
                                          srcTable.Count, this.Context.Resolve <SYSTagApplyBO>().GetTargetObjectIDWithMatchRateByTargetIDAndTagIDs(this.Context.Resolve <SYSTagTargetBO>()[tableName].ID.Value, tagIDs.ToArray()));
                    strWhere.Append(string.Format(SYSTagSearchSql.MatchRateEqualsSql, tagIDs.Length));
                    break;
                }
            }
            else
            {
                strWhere.Append("1=1");
            }
        }