首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用WildCards字符进行LINQ搜索,如*、%、?

使用WildCards字符进行LINQ搜索,如*、%、?
EN

Stack Overflow用户
提问于 2010-06-23 21:55:51
回答 4查看 9.8K关注 0票数 5

您好,我有一个名称类型对象的集合,我想对它执行一个通配符搜索。例如,如果我提供了一个搜索条件*ABC,那么返回的名称应该以ABC开头。如果我提供了一个搜索条件ABC*,那么返回的名称应该以ABC结尾。如果我提供了一个搜索条件*ABC*,那么返回的名称应该包含ABC。如果我提供了一个搜索条件?ABC,那么返回名称的第二、第三和第四个字符应该分别是ABC,而第一个字符可以是任何字符。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-06-23 22:18:28

下面是您可能使用的扩展方法

代码语言:javascript
复制
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("\\?", ".") + "$";
    }
}

使用方法如下:

代码语言:javascript
复制
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;}
}

(WildcardToRegex摘自CodeProject)

票数 10
EN

Stack Overflow用户

发布于 2010-06-23 22:15:53

我认为你需要Regex.Escape和Regex.IsMatch()。

代码语言:javascript
复制
private IEnumerable<Item> FilterList(IEnumerable<Item> list, string query)
{
    string pattern = QueryToRegex(query);

    return list.Where(i => Regex.IsMatch(i.Name, pattern, RegexOptions.Singleline));
}

private static string QueryToRegex(string query)
{
    return "^" + Regex.Escape(query).Replace("\\*", ".*").Replace("\\?", ".") + "$";
}

注意:Samuel Jack's answer更好,因为他的正则表达式更好,所以可耻地在这里修复了它。

票数 3
EN

Stack Overflow用户

发布于 2010-06-23 22:04:46

我认为你需要使用.Contains,.StartWith,.EndsWith

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3102250

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档