LINQ搜索使用像*,%,?的WildCards字符

Sun*_*nil 5 c#

嗨我有一个名称类型对象的集合,我想对它进行通配符搜索.例如,如果我提供搜索条件,*ABC那么返回的名称应该以ABC.如果我提供搜索条件,ABC*那么返回的名称应该以ABC.如果我提供搜索条件,*ABC*则返回的名称应包含ABC.如果我提供搜索条件,?ABC则返回名称的第二个,第三个和第四个字符应ABC分别为第一个字符可以是任何字符.

Sam*_*ack 10

这是您可能使用的扩展方法

public static class EnumerableExtensions
{
    public static IEnumerable<T> MatchesWildcard<T>(this IEnumerable<T> sequence, Func<T,string> expression, string pattern)
    {
        var regEx = WildcardToRegex(pattern);

        return sequence.Where(item => Regex.IsMatch(expression(item), regEx));
    }

    public static string WildcardToRegex(string pattern)
    {
        return "^" + Regex.Escape(pattern).
        Replace("\\*", ".*").
        Replace("\\?", ".") + "$";
    }
}
Run Code Online (Sandbox Code Playgroud)

使用方法如下:

void Main()
{
    var items = new[] { new MyObj { MyProperty = "ABC123" },
                        new MyObj { MyProperty = "123ABC" },
                        new MyObj { MyProperty = "123ABC456" },
    };

    var matches = items.MatchesWildcard(item => item.MyProperty, "???ABC");
}

public class MyObj
{
    public string MyProperty {get;set;}
}
Run Code Online (Sandbox Code Playgroud)

(来自CodeProject的 WildcardToRegex )