我有以下 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/