【发布时间】:2015-07-14 18:29:54
【问题描述】:
我有一个包含供应商名称的列表。说
SuppId Supplier Name
----------------------------------
1 Aardema & Whitelaw
2 Aafedt Forde Gray
3 Whitelaw & Sears-Ewald
使用以下 LINQ 查询
supplierListQuery = supplierListQuery.Where(x => x.SupplierName.Contains(SearchKey));
我可以在以下情况下正确返回记录,
1) 如果我使用搜索字符串作为 "Whitelaw & Sears-Ewald",它将返回第三条记录。
2) 如果我使用 "Whitelaw" 或 "Sears-Ewald",它将返回第三条记录。
但是,如果我将搜索字符串指定为 “Whitelaw Sears-Ewald”,我如何返回第三条记录。它总是返回 0 条记录。
我可以使用 ALL 来获得这个结果,但我不知道如何使用它来满足这个特殊需要。
【问题讨论】:
-
打造智能搜索引擎绝非易事。有很多语言解析和逻辑进入其中,远远超过单个 LINQ 语句。
-
您需要的是模糊搜索,而 LINQ 并没有开箱即用。阅读此stackoverflow.com/questions/13162830/…
-
您是否要求将“Whitelaw”和“Sears-Ewald”视为单独的搜索词并返回包含至少一个搜索词的任何记录?
-
@Max 是的,即有时用户可以使用“Whitelaw Sears-Ewald”代替“Whitelaw & Sears-Ewald”进行搜索。但在这两种情况下,我们都需要返回第三条记录
-
我建议为此使用 RegEx。您可以根据输入构建一个模式,例如 pattern= String.split(" ",input).select(s=>"("+s+")").join(" ")