2

我有以下要在 IQueryable 数据源中查找的值。

用户可以在我的 Silverlight 应用程序的文本框中键入值以过滤结果,然后这些输入将被过滤并发送到我的域服务。

“*”是用户可以输入的内容来进行通配符搜索,例如,返回“TYPE”以“P32”开头的所有值。

List<string> params = new List<string>() { "P32*", "P4552", "P2311" };

然后我将此列表传递给我的域服务代码中的一个函数:

IQueryable<MyClass> temp = this.ObjectContext.MyClass.AsQueryable();
temp = temp.Where(c => params.Contains(c.TYPE));

这是我在实现通配符搜索之前所做的。最干净的方法是什么?我在想我必须在我的参数列表中循环并尝试在每个字符串上包含(在更多的字符串操作之后),但这种方式感觉很不干净

foreach (string x in params)
{
    //look for * wildcard... do some other stuff 
    temp = temp.Where(c=>c.TYPE.Contains(x));
}
4

1 回答 1

1

为此,您需要完全定义通配符的工作方式。完成后,您只需填写以下函数的空白:

public static class WildcardExtensions
{
    public static bool WildcardContains(this IEnumerable<string> patterns, string value)
    {
        return patterns.Any(pattern => MatchesWildcard(pattern, value));
    }

    private static bool MatchesWildcard(string pattern, string value)
    {
        // implement your pattern matching logic here
    }
}

然后你的代码改变了一点:

temp = temp.Where(c => params.WildcardContains(c.TYPE));
于 2012-11-27T18:57:41.447 回答