Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 关于基本搜索功能的建议_C#_Linq - Fatal编程技术网

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)不区分大小写的正则表达式匹配