Example #1
0
        public DataTable GetAdvanceSearchTable()
        {
            NameValueCollection          paras      = System.Web.HttpContext.Current.Request.Params;
            DataClassesDataContext       dc         = new DataClassesDataContext();
            IQueryable <AcceptApplicant> datasource = dc.AcceptApplicant.Where(_sp => _sp.F_status.Equals(ProjectStatus.Draft) == false);
            DataTable dt = UtilHelper.ToDataTableWithStrCol(datasource);

            if (paras["F_scope"] == null)
            {
                Session.Add(SessionMgm.DataSource, dt);
                return(dt);
            }
            String[] F_scopes             = paras["F_scope"].Split(new char[] { ',' });
            String[] F_matchTypes         = paras["F_matchType"].Split(new char[] { ',' });
            String[] F_keywords           = paras["F_keyword"].Split(new char[] { ',' });
            String[] F_contactTypes       = paras["F_contactType"].Split(new char[] { ',' });
            IEnumerable <DataRow> results = null;
            String combineType            = "and";

            for (int index = 0; index < F_scopes.Length; index++)
            {
                int indexOfMatch = index;
                IEnumerable <DataRow> matchResult = null;
                if (F_matchTypes[indexOfMatch].Equals(SearchType.ExactMatch))
                {
                    matchResult = from m in dt.AsEnumerable()
                                  where m.Field <String>(F_scopes[indexOfMatch]).Equals(F_keywords[indexOfMatch])
                                  select m;
                }
                else if (F_matchTypes[indexOfMatch].Equals(SearchType.FuzzMatch))
                {
                    matchResult = from m in dt.AsEnumerable()
                                  where m.Field <String>(F_scopes[indexOfMatch]).Contains(F_keywords[indexOfMatch])
                                  select m;
                }

                if (indexOfMatch == 0)
                {
                    results = matchResult;
                }
                else
                {
                    if (combineType.Trim().Equals("and"))
                    {
                        results = results.Intersect(matchResult);
                    }
                    else if (combineType.Trim().Equals("or"))
                    {
                        results = results.Union(matchResult);
                    }
                    else if (combineType.Trim().Equals("not"))
                    {
                        results = results.Except(matchResult);
                    }
                }
                combineType = F_contactTypes[indexOfMatch];
            }
            DataTable newTable = dt.Clone();


            foreach (DataRow dr in results)
            {
                newTable.Rows.Add(dr.ItemArray);
            }
            Session.Add(SessionMgm.DataSource, newTable);
            return(newTable);
        }