高级搜索模型 - AddIQueryItemAdvSearch +

2017-04-14 18:08:35  访问(1681) 赞(0) 踩(0)


        /// <summary>
        /// 高级搜索模型 - AddIQueryItemAdvSearch + 
        /// </summary>
        /// <param name="entity"></param>
        /// <param name="_infoName">字段|字段|字段</param>
        /// <param name="_theValue">关键词 关键词</param>
        public void AddIQueryItemAdvSearch
            (
                BaseEntity entity,
                string _infoName,
                string _theValue
            )
        {
            if (_infoName == null || _infoName.Length == 0)
                return;

            if (_theValue == null || _theValue.Length == 0)
                return;


            _infoName = _infoName.Trim();
            _theValue = _theValue.Trim();

            if (_infoName.Length == 0)
                return;

            if (_theValue.Length == 0)
                return;

            string[] nameArray = _infoName.Split(new char[] { '|' });
            string[] valueArray = _theValue.Split(new char[] { ' ' });

            int nameLen = nameArray.Length;
            int valueLen = valueArray.Length;

            if (nameLen == 0)
                return;

            if (valueLen == 0)
                return;

            EntityFieldInfo info = null;

            if (nameLen == 1)
            {
                // 一个字段的情况 //
                info = entity.GetExistEntityFieldInfo(nameArray[0]);

                if (valueLen == 1)
                {
                    // 一个值的情况 //
                    // 模糊查找 //
                    m_ListIQueryItem.Add
                       (
                           new DataColumnQueryItem
                               (
                                   info,
                                   SlowX.Core.CoreClasses.DataColumnQueryAssist.dataColumnQueryAssistEmStringCaseLower,
                                   SlowX.Core.Enums.SqlLink.EmSqlLink._Like_,
                                   valueArray[0].Trim().ToLower()
                               )
                       );
                }
                else
                {
                    // 多个条件值的情况 //
                    // 类似:(name like '%slowx%' and name like '%编程%')
                    GroupQueryItem gi
                        =
                        new GroupQueryItem
                            (
                                Enums.SqlConditionLink.EmSqlConditionLink.and
                            );

                    m_ListIQueryItem.Add
                        (
                            gi
                        );

                    foreach (string sValue in valueArray)
                    {
                        if (sValue == null || sValue.Trim().Length == 0)
                            continue;

                        gi.AddIQueryItemWithEntityFieldInfo
                            (
                                Enums.SqlConditionLink.EmSqlConditionLink.and,
                                info,
                                DataColumnQueryAssist.dataColumnQueryAssistEmStringCaseLower,
                                Enums.SqlLink.EmSqlLink._Like_,
                                sValue.Trim().ToLower()
                            );
                    }

                }
            }
            else
            {
                // 多个字段的情况 //
                string tmpValue = "";

                if (valueLen == 1)
                {
                    // 一个条件值 //
                    // 类似:(name like '%slowx%' or keyword like '%slowx%')
                    tmpValue = valueArray[0].Trim().ToLower();

                    GroupQueryItem gi
                        =
                        new GroupQueryItem
                            (
                                Enums.SqlConditionLink.EmSqlConditionLink.and
                            );

                    m_ListIQueryItem.Add
                        (
                            gi
                        );

                    foreach (string sName in nameArray)
                    {

                        if (sName == null || sName.Trim().Length == 0)
                            continue;

                        info = entity.GetExistEntityFieldInfo(sName.Trim());

                        gi.AddIQueryItemWithEntityFieldInfo
                            (
                                Enums.SqlConditionLink.EmSqlConditionLink.or,
                                info,
                                DataColumnQueryAssist.dataColumnQueryAssistEmStringCaseLower,
                                Enums.SqlLink.EmSqlLink._Like_,
                                tmpValue
                            );
                    }
                }
                else
                {
                    // 多个字段多个值 //

                    GroupQueryItem gTotal
                        =
                        new GroupQueryItem(Enums.SqlConditionLink.EmSqlConditionLink.and);

                    GroupQueryItem gi = null;

                    m_ListIQueryItem.Add
                        (
                            gTotal
                        );

                    // 从值的纬度做查询 //
                    // 如:((name like '%slowx%' or keyword like '%slowx%') and (name like '%编程%' or keyword like '%编程%'))
                    foreach (string sValue in valueArray)
                    {
                        if (sValue == null)
                            continue;

                        tmpValue = sValue.Trim();

                        if (tmpValue.Length == 0)
                            continue;

                        tmpValue = tmpValue.ToLower();

                        gi = new GroupQueryItem
                            (
                                Enums.SqlConditionLink.EmSqlConditionLink.and
                            );

                        gTotal.AddGroupQueryItem
                          (
                              gi
                          );

                        foreach (string sName in nameArray)
                        {

                            if (sName == null || sName.Trim().Length == 0)
                                continue;

                            info = entity.GetExistEntityFieldInfo(sName.Trim());

                            gi.AddIQueryItemWithEntityFieldInfo
                                (
                                    Enums.SqlConditionLink.EmSqlConditionLink.or,
                                    info,
                                    DataColumnQueryAssist.dataColumnQueryAssistEmStringCaseLower,
                                    Enums.SqlLink.EmSqlLink._Like_,
                                    tmpValue
                                );
                        }
                    }

                }
            }
        }


标签:高级搜索模型 - AddIQueryItemAdvSearch + 

上一条:

下一条:


 

相关评论

评论加载中……
 

发表评论

类型:
内容:
  (Alt+Enter)