首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Linq to Entities返回与可能字符串列表匹配的记录

使用Linq to Entities返回与可能字符串列表匹配的记录
EN

Stack Overflow用户
提问于 2018-03-03 05:01:49
回答 1查看 400关注 0票数 1

我有一张桌子,里面有一些东西。这些东西都有一个Name字段。我的网站用户可以输入该名称的向前或向后组合,我需要返回正确的内容。

示例:

用户输入:“命名”。

我有一个"the name“的Something.Name。

我把那个东西还给你。

现在,SQL将如下所示:

代码语言:javascript
复制
SELECT * FROM Somethings
Where Name LIKE '%name the%'
OR Name LIKE '%the name%'

如您所见,我需要获取用户输入的字符串的所有排列,然后搜索每个排列。我尝试使用Linq to Entities在循环中完成此操作,如下所示:

代码语言:javascript
复制
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);
}

当用户输入两个单词时,这真的很有效。但是,由于有5个单词(120个排列),查询变得很麻烦,用户的查询超时。

然后我试着:

代码语言:javascript
复制
var matchingSomethings = db.Somethings
                .Where(e => arr.Contains(e.Name));

您可以清楚地看到一个明显的缺陷,那就是在这个查询中不会匹配名称为"the Name of the being“的东西,因为该名称不包括在用户输入的"the name”代码片段中。

那么,我如何编写Linq to Entities查询来获取所有可能内容,其中用户输入的代码片段的任何排列都包含在内容的名称中?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-03 05:12:50

单独查找每个单词,并返回具有所有匹配单词的项。这应该可以做到:

代码语言:javascript
复制
public void MatchSomethings(string input)
{
    var data = new List<something>();
    var wordsInName = input.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
    var match = data.Where(s => wordsInName.All(word => s.Name.Contains(word)));
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49077358

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档