public static string GenerateQuickQueryCondition(string sField, string sValue, QuickQueryType queryType) { string result; if (sField.IsEmpty() || sValue.IsEmpty()) { result = string.Empty; } else { IEnumerable<string> source = sField.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); sValue = sValue.Replace('?', '?').Replace(',', ',').Replace('\u3000', ' '); sValue = sValue.Replace('?', '_').Replace('*', '%'); switch (queryType) { case QuickQueryType.Exact: result = (from s in source select string.Format("{0} = '{1}'", s, sValue)).JoinText(" OR "); break; case QuickQueryType.Fuzzy: result = (from s in source select string.Format("{0} LIKE '%{1}%'", s, sValue)).JoinText(" OR "); break; case QuickQueryType.Combinatorial: result = ( from s in source select ( from s1 in sValue.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries) select string.Format("({0})", ( from s2 in s1.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries) select string.Format("{0} LIKE '%{1}%'", s, s2) ).JoinText(" AND ") ) ).JoinText(" OR ") ).JoinText(" OR "); break; case QuickQueryType.LeftMatch: result = (from s in source select string.Format("{0} LIKE '{1}%'", s, sValue)).JoinText(" OR "); break; default: result = string.Empty; break; } } return result; }
public QuickQuery() { QueryFields = new List<QueryField>(); QuickQueryType = QuickQueryType.Combinatorial; }