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