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();

当输入整个标题时它工作正常,例如“搭便车的利弊”

如何更改查询以便仅返回部分匹配的标题,例如“优点和缺点”

问候

4

2 回答 2

2

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

通常这将在数据源处处理,例如,通过将不区分大小写的排序规则设置为数据库列。

或者,您可以重写查询以使用

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

可以使用

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

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

于 2013-05-03T13:37:24.293 回答
1

在您的示例中,您是否忽略了“利弊”和“利弊”的大小写混合?

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

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

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

于 2013-05-03T13:46:25.767 回答