/// <summary>Searches the table for rows with given field value combinations.</summary> /// <param name="search">The search to run.</param> /// <param name="option">Options for the search and the result set.</param> /// <returns>Returns number of rows found.</returns> protected internal virtual long SqlCount(SqlSearch search, ResultOption option) { if (search is null) { throw new ArgumentNullException(nameof(search)); } if (option is null) { throw new ArgumentNullException(nameof(option)); } if (option.Contains(ResultOptionMode.Group)) { return(SqlCountGroupBy(search, option)); } var command = new StringBuilder(); command.Append("SELECT COUNT(*) FROM "); command.Append(FQTN); command.Append(" WHERE "); command.Append(search); foreach (var o in option.ToArray()) { switch (o.Mode) { case ResultOptionMode.SortAsc: case ResultOptionMode.SortDesc: case ResultOptionMode.None: break; default: throw new InvalidOperationException($"ResultOptionMode {o.Mode} not supported!"); } } var value = Storage.QueryValue(new SqlCmd(command.ToString(), search.Parameters.ToArray())); if (value == null) { throw new InvalidDataException($"Could not read value from {FQTN}!"); } return(Convert.ToInt64(value)); }