public static void Main()
RunExpectedFailureTest(null);
RunExpectedFailureTest("");
RunExpectedFailureTest(" \t");
RunTest("/tell/me/something/good");
public static void RunTest(string tag) {
var result = TransformTag(tag);
Console.WriteLine($"{tag} transformed to {result.TransformedStringForSqlSearch} and needs wildcard search: {result.NeedsWildcardSearch}");
public static void RunExpectedFailureTest(string tag) {
throw new Exception("Expected RunTest to throw an error");
} catch (ArgumentOutOfRangeException) {
Console.WriteLine("Expected ArgumentOutOfRangeException");
public static TagTransformResult TransformTag(string tag) {
if (String.IsNullOrWhiteSpace(tag)) throw new ArgumentOutOfRangeException(nameof(tag));
const string Wildcard = "*";
const string SqlServerEquivalentOfWildcard = "%";
return new TagTransformResult {
NeedsWildcardSearch = (tag ?? String.Empty).Contains(Wildcard),
TransformedStringForSqlSearch = (tag ?? String.Empty).Replace(Wildcard, SqlServerEquivalentOfWildcard)
public class TagTransformResult
public bool NeedsWildcardSearch { get; set; }
public string TransformedStringForSqlSearch {get;set;}