我正在博客站点上实现搜索功能,每个博客可能包含标题,内容,帖子内容等,应该可以这样工作,
目标
当用户键入关键字时,它应该以有效的方式在Sql Server的3列中的任何一个中搜索该字符串。
灵感来源
我正在使用什么
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#提高搜索效率和准确性
答案 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");