我有一桌东西。这些东西有一个名称字段。我网站的用户可以输入该名称的前向或后向组合,我需要返回正确的内容。
例子:
用户输入:“命名”。
我有一件事。“名称”的名称。
我还了一些东西。
现在,SQL如下所示:
SELECT * FROM Somethings
Where Name LIKE '%name the%'
OR Name LIKE '%the name%'
如您所见,我需要获取用户输入的字符串的所有排列,然后搜索每个排列。我尝试在循环中执行此操作,使用Linq到实体,如下所示:
var string[] arr = {"name the", "the name"};
foreach (var str in arr)
{
var matchingSomethings = db.Somethings
.Where(e => e.Name.IndexOf(str , StringComparison.InvariantCultureIgnoreCase) >= 0);
}
当用户输入两个单词时,这种方法非常有效。但是,由于有五个单词(120个排列),它变得很麻烦,用户的查询也超时了。
然后我尝试:
var matchingSomethings = db.Somethings
.Where(e => arr.Contains(e.Name));
您可以清楚地看到其中的明显缺陷,即具有“某物名称”名称的某物在该查询中不会匹配,因为该名称未包含在用户输入的“名称”片段中。
那个么,我该如何编写Linq to Entities查询来获取所有可能的某物,其中用户输入的代码片段的任何排列都包含在某物的名称中?