代码之家  ›  专栏  ›  技术社区  ›  User987

多重滤波器的C#Linq阶

  •  1
  • User987  · 技术社区  · 8 年前

    我有一段代码如下所示:

    using(var ctx = new my_dbEntities())
    {
       var users = ctx.Users.OrderBy(y=>y.LastUpdatedAt).Take(200).ToList();
    }
    

    我试过这样的方法:

     using(var ctx = new my_dbEntities())
     {
        var users = ctx.Users.OrderBy(y=>y.LastUpdatedAt).ThenBy(y=>y.StatsLastUpdated).Take(200).ToList();
     }
    

    但是这个查询太慢了,需要花费太多的时间才能按这个顺序提取200条记录。。

    是否有更好的解决方案,以便我可以通过LINQ加快查询速度?

    有人能帮我吗?

    各位,完整的查询是这样的:

     users = ctx.SearchedUsers.AsNoTracking().AsEnumerable()
                .Where(y => y.InQueue==false 
                            && (DateTime.Now - y.LastTimeSearchedAt).Value.TotalDays < 10)
                 .OrderBy(x => (DateTime.Now - x.LastTimeSearchedAt).Value.TotalDays)
                 .ThenBy(y=>y.LastUpdatedAt).Take(200).ToList();
    

    我已经添加了AsNoTracking()并为这两个列编制了索引,但仍然花费了太多的时间:(

    0 回复  |  直到 8 年前
    推荐文章