我有以下值,我想在我的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));
这是我做之前,我想要实现我的通配符搜索。最干净的方法是什么?我想我不得不通过我的PARAMS名单做这样的事情循环,并尝试一下包含每一个串(后一些更多的字符串操作),但这种方式感觉如此不洁
foreach (string x in params)
{
//look for * wildcard... do some other stuff
temp = temp.Where(c=>c.TYPE.Contains(x));
}
请记住,你的解决方案是“真正的”通配符使用像'*'这样的通配符匹配不起作用。例如“P32 *”不匹配“P32Whatever”,但“P4552”匹配“HelloP4552World”。 虽然......但是仍在考虑更好的解决方案 – Spontifixus
为了简单起见,我保留了这一点,但回头看,我应该掀起一些东西。幸运的是,我可以假设我的输入始终是'P',然后是4位数。 – user1384831