void AddStringComparingCause(string columnName, string value, StringPropertyComparingModes comparingModes, string parameterName, int length) { if (value != null) { if (value == "") { whereCauses.Add(string.Format("[{0}] = ''", columnName)); } else { if (comparingModes == StringPropertyComparingModes.Contains) { whereCauses.Add(string.Format("[{0}] like @{1}", columnName, parameterName)); parameters.Add(new SqlParameter("@" + parameterName, System.Data.SqlDbType.NVarChar, length * 3 + 2) { Value = SqlServerLikeValueBuilder.EscapeAndInclude(value) }); } else if (comparingModes == StringPropertyComparingModes.Equals) { whereCauses.Add(string.Format("[{0}] = @{1}", columnName, parameterName)); parameters.Add(new SqlParameter("@" + parameterName, System.Data.SqlDbType.NVarChar, length * 3) { Value = SqlServerLikeValueBuilder.EscapeForEquals(value) }); } else if (comparingModes == StringPropertyComparingModes.StartsWith) { whereCauses.Add(string.Format("[{0}] like @{1}", columnName, parameterName)); parameters.Add(new SqlParameter("@" + parameterName, System.Data.SqlDbType.NVarChar, length * 3 + 1) { Value = SqlServerLikeValueBuilder.Escape(value) + "%" }); } else if (comparingModes == StringPropertyComparingModes.EndsWith) { whereCauses.Add(string.Format("[{0}] like @{1}", columnName, parameterName)); parameters.Add(new SqlParameter("@" + parameterName, System.Data.SqlDbType.NVarChar, length * 3 + 1) { Value = "%" + SqlServerLikeValueBuilder.Escape(value) }); } else { WhereCauseBuilder inner = new WhereCauseBuilder(parameters, false); if (comparingModes.HasFlag(StringPropertyComparingModes.Equals)) { inner.AddStringComparingCause(columnName, value, StringPropertyComparingModes.Equals, "Equals" + columnName, length); } if (comparingModes.HasFlag(StringPropertyComparingModes.Contains)) { inner.AddStringComparingCause(columnName, value, StringPropertyComparingModes.Contains, "Contains" + columnName, length); } if (comparingModes.HasFlag(StringPropertyComparingModes.StartsWith)) { inner.AddStringComparingCause(columnName, value, StringPropertyComparingModes.StartsWith, "StartsWith" + columnName, length); } if (comparingModes.HasFlag(StringPropertyComparingModes.EndsWith)) { inner.AddStringComparingCause(columnName, value, StringPropertyComparingModes.EndsWith, "EndsWith" + columnName, length); } whereCauses.Add("(" + inner.ToString() + ")"); } } } }
internal void AddStringComparingCause(string columnName, string value, StringPropertyComparingModes comparingModes, int length = 256) { AddStringComparingCause(columnName, value, comparingModes, columnName, length); }