我有一个基本的搜索功能,我想根据产品的标题(名称)找到产品。
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的利弊”
如何更改查询以便仅在部分匹配时返回标题,例如“优点和缺点”
问候
答案 0 :(得分:2)
您的代码已使用查找子字符串的String.Contains()
方法。您的示例测试用例的问题更可能与搜索字符串的大小相关联。
通常这将在数据源处理,例如,通过将Case Insensitive排序规则设置为数据库列。
或者,您可以重写查询以使用
&& pf.FieldValue.ToUpper().Contains(txtSearchValue.ToUpper())
可以使用
&& pf.FieldValue.IndexOf(txtSearchValue, StringComparison.OrdinalIgnoreCase) > -1
但LINQ提供程序不太可能支持它(例如,Entity Framework不支持它)。
答案 1 :(得分:1)
在你的例子中,你是否忽略了“利弊”和“利弊”的大小写混合?
有几种不同的方法可以忽略大小写。这是一个:
var foo = "The Pros and Cons";
bool matched = foo.IndexOf("pros and cons", StringComparison.OrdinalIgnoreCase) >= 0;
其他一些选项包括1)比较它们之前的两个字符串的小写或大写,或2)使用CultureInfo和CompareInfo
,或3)使用不区分大小写的正则表达式匹配。