Linq查询具有多列C#

时间:2018-07-24 12:25:25

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

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

目标

  

当用户键入关键字时,它应该以有效的方式在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();

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

  

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

然后我搜索

  

亚马逊和eBay

结果不包含实际的帖子

但此匹配

  

打开

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

请帮助使用linq查询C#提高搜索效率和准确性

1 个答案:

答案 0 :(得分: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)等于::在多个属性中的任何一个等于单个搜索词的情况下进行搜索

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");