c# - 如何优化这个 linq 查询?

标签 c# .net sql linq optimization

我有以下 linq 查询:

var allnews = from a in db.News
                              where !(from c in db.NewsViews
                                      where c.UserGuid == thisUser.UserGuid
                                      select c.NewsGuid).Contains(a.NewsGuid)
                              orderby a.Date descending
                              select a;

我想知道优化它的最佳方法是什么?或者查询分析器会为我做这件事吗?

编辑:想法是获取用户尚未看到的所有新闻项。因此,一旦用户看到某个项目,我就将该项目存储在 NewsViews 中。新闻本身在新闻中。

最佳答案

子查询好像没有用到a,所以

      //untested
      var allnews = from a in db.News
                    let excluders = from c in db.NewsViews
                                    where c.UserGuid == thisUser.UserGuid
                                    select c.NewsGuid   
                          where !excluders.Contains(a.NewsGuid)
                          orderby a.Date descending
                          select a;

但请注意,您现在正在通过 LINQ 进行 SQL 优化(顺便说一句,这是 L2S 还是 EF?)。
而普通的SQL优化已经够难的了。您必须使用实际数据进行测量和分析。 @Joachim 的多内连接子查询方法很可能更好。

关于c# - 如何优化这个 linq 查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3729083/

相关文章:

c# - Mono 没有找到 UIA Bridge,但是包已经安装了

c# - 如何从 ASP.Net 以 "fire and forget"方式调用 Web 服务

c# - 将存储过程调用从 LINQ 数据上下文传递到另一个方法。 C#

c# - 找不到名称时统一容器可以解析默认类型吗?

sql - 如何在两个相同的表上计数

php - 在PHP中显示mysql表数据

sql - 将行值合并到 CSV 中(对于 SQL Server,也称为 GROUP_CONCAT)

c# - 如何使用带有 Flowplayer 的 RTMP 从 Cloudfront 运行私有(private)内容视频

c# - Xamarin 中的跨平台 OpenGL 渲染

c# - 托管 PNG 优化库可用吗?