如何使用 LINQ to SQL 创建排名搜索结果?

2024-03-21

我正在寻找一种使用 l2s 根据关键字返回排名结果的方法。

我想使用一个关键字并能够使用该关键字在表中搜索该关键字.contains()。我无法弄清楚的技巧是如何计算该 keyqord 出现的次数,然后.OrderByDescending()根据该计数。

所以如果我有类似的事情:

string keyword = "SomeKeyword";

IQueryable<Article> searchResults = from a in GenesisRepository.Article
                                    where a.Body.Contains(keyword)
                                    select a;

最好的订购方式是什么searchResults根据次数keyword出现在a.Body?

谢谢你的帮助。


尝试插入order by a.Body.Split(' ').Count(w=>w == keyword)。这应该能让你看到这个概念是有效的。但是,我强烈建议最终版本将其作为选择投影的一部分,可能使用键值对,并按属性名称排序:

string keyword = "SomeKeyword";

//EDIT: restructured query to force the ordering to be done on the projection, 
//not the source.
IQueryable<Article> searchResults = (from a in GenesisRepository.Article
                                    where a.Body.Contains(keyword)
                                    select new KeyValuePair<int, Article>(
                                       a.Body.Split(' ').Count(w=>w == keyword), a))
                                    .OrderBy(kvp=>kvp.Key);

原因是性能; Split().Count() 方法链是线性复杂度的,每次比较两个值都会进行评估,从而使整体排序复杂度为 N^2logN(慢)。

编辑:另外,请理解 a.Body.Contains(keyword) 不会按整个单词搜索,因此将返回包含“SomeKeywordLongerThanSearch”和“ThisIsSomeKeyword”以及“SomeKeyword”的文章。您可以通过对模式“\bSomeKeyword\b”进行正则表达式匹配来避免这种情况,它只会匹配前后紧邻单词边界的 SomeKeyword 实例。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 LINQ to SQL 创建排名搜索结果? 的相关文章

随机推荐

  • 颤动应用程序缓慢

    我正在尝试 Flutter 但我的应用程序在模拟器和真实设备上的响应速度都非常慢 我收到这样的警告 跳过了 51 帧 该应用程序可能在其上做了太多工作 主线程 我知道 Dart 是一种单线程编程语言 在 Android 中我曾经用旧的方法来
  • Pandas read_sql() - AttributeError:“Engine”对象没有属性“cursor”

    我正在尝试使用 pandas read sql 方法和 python3 sqlalchemy pymysql 从 MySQL 查询中读取数据 我尝试遵循以下教程 https pythondata com quick tip sqlalche
  • 我可以在 R 中加载第三方 .dll 吗?

    我运行的是 Windows 7 并且我知道 DLL 是使用 Visual Studio C 2010 构建的 由于我没有源代码 因此在创建包 NAMESPACE 时无法在 R 中即时构建它 在这个阶段 我不需要创建包 我只想使用 R 加载库
  • c中switch语句中的多个变量

    如何使用c中的switch语句在c中编写以下语句 int i 10 int j 20 if i 10 j 20 Mymethod else if i 100 j 200 Yourmethod else if i 1000 j 2000 OR
  • 如何更改卢比符号

    Hiii 我正在使用 magento 1 4 我想在前端和后端将印度货币符号 Rs 更改为新的卢比符号 任何人都可以告诉我这个吗 如果我没记错的话 可以找到符号定义 lib Zend Locale Data characters xml l
  • 如果不为零且不为空则合并数组

    Ruby 中有一些数组 这种情况下有 4 个数组吗 array1 key label1 1 value label1 2 key label1 2 value label1 2 array2 key label2 1 value label
  • 使用 Flask 重定向获取下一个 URL

    我正在关注这个信息在这里 https stackoverflow com questions 28784002 flask basic http auth use login page 一切看起来都不错 但我需要知道如何从倒数第二行的新登录
  • 意图启动新活动非常慢:(

    我有一段 Intent 代码 Intent i new Intent i setAction Intent ACTION MAIN i addCategory Intent CATEGORY LAUNCHER i setFlags Inte
  • 如何在 Javascript 中将缓冲区对象转换为图像?

    我只是尝试将图像作为缓冲区添加到 mongodb 并尝试转换回图像 在ejs中 效果很好 src data image png base64 这是我在ejs中使用的代码 但是当我尝试通过纯js 将其附加到元素时 它显示错误 two prep
  • Activeadmin 可按多列排序

    有没有可能排序activeadmin表使用多列 我找到了一个issue https github com gregbell active admin issues 909也就是说现在这是不可能的 但我想知道有没有人实现过这样的功能 我也遇到
  • 在网站完全打开之前尝试输入登录凭据时出现“无警报打开”

    I am trying to access a website However to access the website first I need to enter username and password After that ful
  • 删除所有换行符并将其添加到特定文本之后

    我有一个文本文件 其中必须删除所有换行符 然后在每个文本后添加新的换行符 我怎样才能使用替换工具做到这一点 您至少需要分两步完成 首先 单击工具栏中的 符号 您可以查看是否有CRLF行结尾或只是LF 单击 替换 按钮 然后将 r n or
  • touchmove 事件不会在 Android 版谷歌浏览器上触发

    这是针对 客户签名 组件的反应 touchmove 事件不会在 Android 版 Google Chrome 浏览器上触发 我使用的是三星 Galax 平板电脑 a 2016 我通过 USB 控制台将平板电脑连接到我的电脑 在我的 com
  • bash: /usr/local/android-sdk-linux/tools/android: 权限被拒绝

    我正在尝试在 Ubuntu 上安装手机间隙 我遵循了所有必要的步骤并在 Ubuntu 上成功安装了 android sdk 但是当我在终端中输入 android 时 它显示权限被拒绝 我如何更改权限 错误是 bash usr local a
  • PHP 中 echo、echo()、print 和 print() 之间的区别[重复]

    这个问题在这里已经有答案了 可能的重复 PHP 中的 echo 和 print 有何不同 https stackoverflow com questions 234241 how are echo and print different i
  • Python根据值绘制不同颜色的散点图

    我有一个数据框 我想绘制散点图 数据框看起来像 year length Animation 0 1971 121 1 1 1939 71 1 2 1941 7 0 3 1996 70 1 4 1975 71 0 我希望散点图中的点具有不同的
  • 启用了 selinux 的 Docker - 不允许在 /usr 中重新标记内容

    我在 Centos7 上安装了 Docker 并将 selinux 设置为在主机上强制执行 并且 Docker 守护进程以 selinux enabled 标志启动 当我尝试运行以下命令时 docker run it v usr local
  • 当用户注销 React Native 应用程序时,如何删除 Firebase Cloud Messaging Token?

    我使用 React Native FCM 进行消息传递 当用户注销应用程序时 我想删除 FCM 令牌 以便用户不会再次收到通知 下面是我的注销代码 signOutAsync async gt this logoutEvent API pos
  • Kivy Popup渲染问题

    我正在开发一个公交车司机应用程序 偶尔 应用程序 通过服务器 订阅的 MQTT 主题上会发布消息 当出现此类消息时 必须出现弹出窗口 我定制了默认的 Kivy 弹出窗口 更改了背景 添加了带有标签和按钮的 FloatLayout 作为内容
  • 如何使用 LINQ to SQL 创建排名搜索结果?

    我正在寻找一种使用 l2s 根据关键字返回排名结果的方法 我想使用一个关键字并能够使用该关键字在表中搜索该关键字 contains 我无法弄清楚的技巧是如何计算该 keyqord 出现的次数 然后 OrderByDescending 根据该