我想在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));
}
答案 0 :(得分: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));