Search code examples
c#linqsearchautosuggeststartswith

Extension of StartsWith that searches in all words


Is there an extension of string's StartsWith that it searches at the start of every word in the string?

Something like: "Ben Stiller".StartsWithExtension("Sti") returning true

I want this so I can make a predicate for searching.

Lets say there's a list called Persons, ICollection<Person>
Each person has a property Name, with values like "Ben Stiller" or "Adam Sandler".

I want to be able to do predicates like:

Persons.Where(p => p.Name.StartsWithExtension(query))

Thanks (Other better ways of achieving this are welcome)


Solution

  • You can split the string up by words first, like this:

    var result = "Ben Stiller".Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries)
                              .Any(x => x.StartsWith("Sti"));
    

    Of course you could write this as you're own extension method, like this:

    public static bool AnyWordStartsWith(this string input, string test)
    {
        return input.Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries)
                    .Any(x => x.StartsWith(test));
    }