c# - 基于计数的 orderby 相关性的 LINQ 关键字搜索 (LINQ to SQL)

标签 c# .net linq linq-to-sql

这是我现在拥有的非常基本的搜索:

var Results = from p in dx.Listings select p;
if (CategoryId > 0) Results = Results.Where(p => p.CategoryId == CategoryId);
if (SuburbId > 0) Results = Results.Where(p => p.SuburbId == SuburbId);
var OrderedResults = Results.OrderByDescending(p => p.ListingType);
OrderedResults = OrderedResults.ThenByDescending(p => p.Created);

我知道我可以添加 .Contains() 或类似内容并从关键字框中输入关键字(拆分为单个项目),这样应该会得到结果列表。

但是我需要按基本相关性对结果进行排序。这意味着如果记录 A 包含 2 个关键字(在“正文”nvarchar(MAX) 字段中),它应该高于仅与 1 个关键字匹配的记录 B。我不需要每次点击的完整计数...但是,如果这更易于管理,那就没问题了。

那么有什么方法可以很好地直接将命中数作为 orderby 的一部分?我可以通过获取结果和解析来管理它,但是我真的不想那样做,因为解析可能有数千个可能会影响 IIS 机器,而 SQL Server 是一个相当强大的集群:)

如果有人有任何想法或提示,那将是一个很大的帮助。

最佳答案

如果我对你的理解是正确的,你想调用 OrderyByDescending( p => p.Body ) 但它应该按某个单词在 p.Body 中出现多少次来排序?

然后您应该能够创建一个方法来计算出现次数并返回计数,然后您可以简单地执行 OrderyByDescending( p => CountOccurences(p.Body) )

您也可以创建一个实现 IComparerBodyComparer 类,然后将其传递给 OrderByDescending

编辑: 看看这个链接Enable Full Text Searching

关于c# - 基于计数的 orderby 相关性的 LINQ 关键字搜索 (LINQ to SQL),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1322675/

相关文章:

.NET:将剪贴板图像保存为 PNG 失败

c# - .NET LINQ to Entities 泛型类型的基础 where 子句

c# - 通过使用 linq to ado.net 实体 froamwork 将记录插入具有一对多关系的两个表中

c# - Web API 请求后需要记录 EF DbContext 的 CaSTLe Windsor 生活方式

C#.Net 委托(delegate)

.net - 未知内容长度的 HTTP header

c# - Linq 从 List<string> 中包含

c# - 等价于 C# 中的 sprintf?

javascript - 如何以正确的格式从js获取日期?月和日颠倒

c# - 将 'List' 项附加到 StringBuilder