有关基本搜索功能的建议

时间:2013-05-03 13:34:15

标签: c# linq

我有一个基本的搜索功能,我想根据产品的标题(名称)找到产品。

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 个答案:

答案 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)使用CultureInfoCompareInfo,或3)使用不区分大小写的正则表达式匹配。