圣诞快乐,新年快乐。
我正在创建一个基于关键字的搜索算法,有时基于短语。我想根据搜索栏中每个短语的每个单词输出结果.
下面是我的代码,很好.
var searchWords = Request["searchTerm"].Split(' ');
IEnumerable<dynamic> stories = Enumerable.Empty<string>();
var sqlSelect = "SELECT TOP 10 Feeds.* FROM Feeds WHERE Feeds.AdminPublish=@1 AND Title LIKE @0 ORDER BY UploadDate DESC";
foreach(var word in searchWords)
{
stories = stories.Concat(db.Query(sqlSelect, "%" + word + "%",).ToList());
}In my (结果页)
@foreach (var d in stories){
//Show Title and description
@d.Title
@d.Username
}问题
让我们说,我在搜索“烦人的圣诞”,在搜索完db之后,它将短语分成三个,并根据发现的三个单词的相似性/相似性返回结果。我得到的结果是
烦人的圣诞歌曲的社会学
欢迎来到未来
的社会学烦人的圣诞歌曲
欢迎来到未来
讨厌的圣诞歌曲的社会学
欢迎来到未来
如何使我的结果不显示具有类似ID的结果,或者如何删除多余的重复项
谢谢。
发布于 2014-12-30 07:53:53
Yo可以使用Distinct关键字从表中选择Distinct
var sqlSelect = @"SELECT distinct TOP 10 Feeds.*
FROM Feeds WHERE Feeds.AdminPublish=@1 AND
Title LIKE @0 ORDER BY UploadDate DESC";编辑:
那你就可以这样做
foreach(var word in searchWords)
{
stories = stories.Concat(db.Query(sqlSelect, "%" + word + "%",).ToList());
}
stories= stories.Distinct<dynamic>();发布于 2014-12-30 08:05:53
此外,还可以在lambda表达式中使用不同的扩展方法在视图中实现相同的扩展(Razor)
@foreach (var d in stories.Distinct()){
//Show Title and description
@d.Title
@d.Username
}您还可以提供一个特定的属性,根据该属性可以将列表区分开来,例如:
stories.Distinct(x=>x.Title)
//Or
stories.Distinct(x=>x.UserName)发布于 2014-12-30 08:09:18
我要说的是,首先不要向stories添加重复的值.
与此类似的是:
foreach(var word in searchWords)
{
lst = db.Query(sqlSelect, "%" + word + "%",).ToList()
foreach(var v in lst)
{
if (!stories.Contains(v))
stories.Add(v)
}
}https://stackoverflow.com/questions/27701572
复制相似问题