【发布时间】:2018-01-12 13:56:10
【问题描述】:
在我的 winform 应用程序中,我有一个表单,用户可以通过在搜索字段中输入任何文本来搜索产品。例如,产品描述可能存储为 "Adidas aftershave 100Ml" 。但是用户可以输入任何东西,比如100 Ml Aftershave。因此,我想使用 linq 查询以获取描述中包含任何这些单词的所有记录(100 Ml Aftershave)。
到目前为止,我已经做了这样的事情:
List<string>txtList = txtSearchTerm.Text.Split(' ').ToList();
return dbContext.productRepo.Where(t => txtList.Any(b =>
t.ProductDescription.StartsWith(b)
|| t.ProductDescription.EndsWith(b)
|| t.ProductDescription.Contains(b)
)).Select(x => x.ProductDescription).ToList();
以更好的方式实现这一目标的任何其他方式,使其更快或任何其他改进。
谢谢
【问题讨论】:
-
也许你可以只使用一个 IndexOf != -1
-
您可以根据您的 txtSearchTerm 构建一个正则表达式并使用它来匹配目标字符串。 .*(100|Ml|Aftershave).* 将匹配“Adidas aftershave 100Ml”
-
Contains将涵盖StartsWith和EndsWith两种情况。 -
您可以考虑使用数据库的原生“全文搜索”功能。例如。 Oracle 有Oracle Text,显然 MS SQL 也有类似的东西。
-
好主意,如果我在 MSSQL 中启用全文索引,不知道如何在 linq 中使用它。
标签: c# performance linq search