C# 关于基本搜索功能的建议
我有一个基本的搜索功能,我想根据产品的标题(名称)查找产品C# 关于基本搜索功能的建议,c#,linq,C#,Linq,我有一个基本的搜索功能,我想根据产品的标题(名称)查找产品 rep.GetDomainObjectsByType("Visuals Product"); var visualsProducts = rep.DomainObjects; prodSearched = (from p in visualsProducts from pf in p.DomainObjectFields
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();
当输入整个标题时,如“搭便车的利弊”时,它可以正常工作
如何更改查询,以便仅返回部分匹配的标题,如“赞成和反对意见”
关于您的代码已经在使用查找子字符串的
String.Contains()
方法。样本测试用例的问题更可能与搜索字符串的套管有关
通常,这将在数据源处处理,例如,通过将不区分大小写的排序规则设置为数据库列
或者,您可以重写查询以使用
&& pf.FieldValue.ToUpper().Contains(txtSearchValue.ToUpper())
可以使用
&& pf.FieldValue.IndexOf(txtSearchValue, StringComparison.OrdinalIgnoreCase) > -1
但是LINQ提供程序不太可能支持这一点(例如,实体框架不支持它)。您的代码已经在使用查找子字符串的
String.Contains()
方法。样本测试用例的问题更可能与搜索字符串的套管有关
通常,这将在数据源处处理,例如,通过将不区分大小写的排序规则设置为数据库列
或者,您可以重写查询以使用
&& pf.FieldValue.ToUpper().Contains(txtSearchValue.ToUpper())
可以使用
&& pf.FieldValue.IndexOf(txtSearchValue, StringComparison.OrdinalIgnoreCase) > -1
但是LINQ提供者不太可能支持这一点(例如,实体框架不支持它)。在您的示例中,您是否忽略了“正反”和“正反”的混合情况 有几种不同的方法可以忽略这个案例。这里有一个:
var foo = "The Pros and Cons";
bool matched = foo.IndexOf("pros and cons", StringComparison.OrdinalIgnoreCase) >= 0;
其他一些选项包括1)在比较字符串之前使用小写或大写,或2)使用和
CompareInfo
,或3)使用不区分大小写的正则表达式匹配。在您的示例中,您是否忽略了“正反”和“正反”的大小写混合
有几种不同的方法可以忽略这个案例。这里有一个:
var foo = "The Pros and Cons";
bool matched = foo.IndexOf("pros and cons", StringComparison.OrdinalIgnoreCase) >= 0;
其他一些选项包括1)在比较字符串之前使用小写或大写,或2)使用和CompareInfo
,或3)不区分大小写的正则表达式匹配