/// <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); }
/// <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"); } }