我有一个foreach循环来构建搜索结果,有时它会返回相同的页面名称和描述,但是该链接会有所不同,因为它具有一个第三方画廊模块,该模块在URL中具有不同的查询。
例如:
Resources/Videos/emodule/936/eitem/75
会有一个视频
和
/Resources/Videos/emodule/936/eitem/73
会有所不同。
标题和描述相同。
如何更改foreach循环以检查页面标题是否相同,如果相同,则排除sb.AppendLine
搜索结果?
这是我当前的代码:
TotalPageResults = "0";
var searchResults = SearchController.Instance.ModuleSearch(query);
if(searchResults != null)
{
TotalPageResults = searchResults.TotalHits.ToString();
var sb = new StringBuilder();
sb.AppendLine("<div class='page_results'><span class='page_results_text'>Page Results:</span></br>");
foreach(var result in searchResults.Results)
{
sb.AppendLine($"</br><span><a href='{result.Url}' class='page_results_link'>{result.Title}</a></span></br><span class='page_result_description'>{result.Description}</span></br><span class='page_results_date_modified'>Updated: {result.DisplayModifiedTime}</span></br>");
}
sb.AppendLine("</div>");
DNNSearchResuls = sb.ToString();
}
答案 0 :(得分:2)
保留一组您已经看到的结果,并在“做某事”之前检查它是否是新的
var stuffImThinkinAbout = new List<string>();
var stuffIAlreadyHave = new HashSet<string>();
foreach (var i in stuffImThinkinAbout)
{
if (!stuffIAlreadyHave.Contains(i))
{
//do the thing
stuffIAlreadyHave.Add(i);
}
else
{
//skip dupe
}
}
然后使用标题或其他任何东西作为您的“键”以使其具有唯一性。
答案 1 :(得分:1)
可以检查Stringbuilder是否已经包含标题和描述。沿线的东西:
foreach(var result in searchResults.Results)
{
if(!sb.ToString().Contains(result.Title) && !sb.ToString().Contains(result.Description)
sb.AppendLine($"</br><span><a href='{result.Url}' class='page_results_link'>{result.Title}</a></span></br><span class='page_result_description'>{result.Description}</span></br><span class='page_results_date_modified'>Updated: {result.DisplayModifiedTime}</span></br>");
}
}
答案 2 :(得分:0)
尝试在要区分的属性上使用GroupBy
,并在组中仅选择一条记录。
此代码仅适用于属性Title
foreach (var result in searchResults.Results.GroupBy(p => p.Title).Select(g => g.First())
{
}
或2个属性Title
和Description
foreach (var result in searchResults.Results.GroupBy(p => new {p.Title, p.Description}).Select(g => g.First())
{
}