【问题标题】:Linq Query For AutoComplete Match With Multiple Columns C#用于自动完成匹配多列 C# 的 Linq 查询
【发布时间】:2019-01-01 01:47:07
【问题描述】:

我正在我的博客网站上实现搜索功能,每个博客可能包含标题、标签、帖子内容等,应该像这样工作,

目标

当用户键入关键字时,它应该以有效的方式搜索包含在 Sql Server 中 3 列中的任何一个中的字符串。

灵感来源

Source

我在用什么

 db.postTBs.Where(a => a.isApproved == true && a.isShow == true && a.pageKeyword.Contains(query) || a.pageDescribtion.Contains(query) || a.pageTitle.Contains(query) || a.postContent.Contains(query)).Select(a => a.title).ToList();

但我知道这不是获得结果的好方法,这个查询搜索到这 3 列的特定字符串长度但是当我有长字符串时

只从信誉良好的经销商处购买。任何有信誉的经销商只会直接从公司或值得信赖的经销商处购买。 检查价格。价格看起来好得令人难以置信吗?它可能是。虽然这些网站上有许多诚实的经销商,但亚马逊和 eBay 卖家是销售假字符串的最大罪魁祸首。检查卖家的亚马逊或 eBay 商店以验证他们是谁。如果某人的价格大大低于您所看到的,则很有可能这不是一个合法的字符串被出售。 也从信誉良好的经销商处购买您的乐器!很多便宜的

然后我搜索

亚马逊和易趣

结果不包含实际帖子

但是这个匹配

开启

我还在两列上都应用了Non cluster

请帮助如何使用 linq query c# 使搜索高效准确

【问题讨论】:

  • 你试过这个a.pageKeyword.Trim().ToLower().Contains(query.Trim().ToLower()) 吗?
  • 是但没有运气结果不准确。
  • 您准备好为此使用第三方库了吗?

标签: c# sql-server linq non-clustered-index


【解决方案1】:

如果您准备在您的项目中使用第三方 dll,请访问here

只需下载nuget包Install-Package NinjaNye.SearchExtensions

从你可以使用的链接

1) 包含:在多个属性中搜索单个搜索词

var result = queryableData.Search(x => x.Property1,
                                  x => x.Property2,
                                  x => x.Property3)
                          .Containing("searchTerm");

2) ContainingAll:在多个属性中存在所有搜索词的地方进行搜索

var result = queryableData.Search(x => x.Property1,
                                  x => x.Property2,
                                  x => x.Property3)
                          .ContainingAll("search", "term");

3) EqualTo:在多个属性中的任何一个等于单个搜索词的情况下进行搜索

var result = queryableData.Search(x => x.Property1,
                                  x => x.Property2,
                                  x => x.Property3)
                          .EqualTo("searchTerm");

4) StartsWith: 搜索多个属性中的任何一个以单个搜索词开头的位置

var result = queryableData.Search(x => x.Property1,
                                  x => x.Property2,
                                  x => x.Property3)
                          .StartsWith("searchTerm");

5) EndsWith: 搜索多个属性中的任何一个以单个搜索词结尾的位置

var result = queryableData.Search(x => x.Property1, 
                                  x => x.Property2,
                                  x => x.Property3)
                          .EndsWith("searchTerm");

【讨论】:

  • 如果它对您有帮助,那么在您执行此代码后接受答案:)
  • 非常感谢和支持,如果您喜欢这个问题,请投票。
  • 很高兴听到您解决了问题。我对你的问题投了赞成票:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-18
相关资源
最近更新 更多