2013-05-03 32 views
0

我有一个基本的搜索功能,我希望根据产品的标题(名称)找到产品。关于基本搜索功能的建议

rep.GetDomainObjectsByType("Visuals Product"); 
    var visualsProducts = rep.DomainObjects; 

prodSearched = (from p in visualsProducts 
          from pf in p.DomainObjectFields 
          where pf.FieldName == "Product Title" && pf.FieldValue.Contains(txtSearchValue) 
          select p).Distinct().ToList(); 

输入如“的优点和hitchiking的利弊”

当整个标题它正常工作,我该如何改变查询,以回报部分匹配的标题只是如“正反缺点

问候

回答

2

您的代码已经在使用String.Contains()方法寻找一个字符串。您的示例测试用例的问题更可能与搜索字符串的大小相关联。

通常这将在数据源处理,例如,通过将不敏感归类设置为数据库列。

或者你可以重写查询使用

&& pf.FieldValue.ToUpper().Contains(txtSearchValue.ToUpper()) 

它可以使用

&& pf.FieldValue.IndexOf(txtSearchValue, StringComparison.OrdinalIgnoreCase) > -1 

但这是不太可能由LINQ提供程序支持(例如,实体框架做不支持它)。

1

在你的例子中,你是否忽略了“利弊”和“利弊”混合情况?

有几种不同的方法可以忽略大小写。这里是一个:

var foo = "The Pros and Cons"; 
bool matched = foo.IndexOf("pros and cons", StringComparison.OrdinalIgnoreCase) >= 0; 

一些其他选项包括1)小写或比较之前大写两个串,或2)使用CultureInfoCompareInfo,或3)使用不区分大小写的正则表达式的匹配。