private SqlString GetSqlString(ICriteriaQuery criteriaQuery, SqlString[] columns, Parameter bogusParam) { if (columns.Length <= 1 || criteriaQuery.Factory.Dialect.SupportsRowValueConstructorSyntaxInInList) { var wrapInParens = columns.Length > 1; const string comaSeparator = ", "; var singleValueParam = SqlStringHelper.Repeat(new SqlString(bogusParam), columns.Length, comaSeparator, wrapInParens); var parameters = SqlStringHelper.Repeat(singleValueParam, Values.Length, comaSeparator, wrapInParens: false); //single column: col1 in (?, ?) //multi column: (col1, col2) in ((?, ?), (?, ?)) return(new SqlString( wrapInParens ? StringHelper.OpenParen : string.Empty, SqlStringHelper.Join(comaSeparator, columns), wrapInParens ? StringHelper.ClosedParen : string.Empty, " in (", parameters, ")")); } //((col1 = ? and col2 = ?) or (col1 = ? and col2 = ?)) var cols = new SqlString( " ( ", SqlStringHelper.Join(new SqlString(" = ", bogusParam, " and "), columns), "= ", bogusParam, " ) "); cols = SqlStringHelper.Repeat(cols, Values.Length, " or ", wrapInParens: Values.Length > 1); return(cols); }