C# 我们如何优化linq到实体查询以减少响应时间? IQueryable mySearch= eventDC.GetBooks() 其中(p=>p.Price.Any(d=>d.EventDatetime.Month==fromDate.Month &&d.EventDatetime.Year==fromDate.Year)) .WithGroup(组ID) .OrderBy(p=>p.Price.Where(r=>r.Datetime>=fromDate) .OrderBy(q=>q.Datetime) .FirstOrDefault().Datetime); ListventsList=mySearch.ToList();

C# 我们如何优化linq到实体查询以减少响应时间? IQueryable mySearch= eventDC.GetBooks() 其中(p=>p.Price.Any(d=>d.EventDatetime.Month==fromDate.Month &&d.EventDatetime.Year==fromDate.Year)) .WithGroup(组ID) .OrderBy(p=>p.Price.Where(r=>r.Datetime>=fromDate) .OrderBy(q=>q.Datetime) .FirstOrDefault().Datetime); ListventsList=mySearch.ToList();,c#,asp.net,linq,linq-to-entities,database-optimization,C#,Asp.net,Linq,Linq To Entities,Database Optimization,我们有这么长的查询,获取书籍和排序需要花费很多时间,经过性能测试,我们发现包含此查询的页面的响应时间超过10秒,我们需要寻求解决此问题并减少响应时间 有人有什么建议吗?你到底想做什么?你能告诉我这里的模式吗 这对我来说似乎是一个奇怪的说法,因为我不知道模式: p=>p.Price.Any(d=>d.EventDatetime.Month 然而,我想在这里暗中拍一张照片,说你可能对以下方面有意见: eventDC.GetBooks() 如果该方法调用存储过程或在数据库上执行“Select*from

我们有这么长的查询,获取书籍和排序需要花费很多时间,经过性能测试,我们发现包含此查询的页面的响应时间超过10秒,我们需要寻求解决此问题并减少响应时间


有人有什么建议吗?

你到底想做什么?你能告诉我这里的模式吗

这对我来说似乎是一个奇怪的说法,因为我不知道模式:

p=>p.Price.Any(d=>d.EventDatetime.Month

然而,我想在这里暗中拍一张照片,说你可能对以下方面有意见:

eventDC.GetBooks()

如果该方法调用存储过程或在数据库上执行“Select*fromsbooks”操作,则实际执行的操作是:

  • 从数据库中选择所有书籍
  • 获取结果列表并仅从中选择所需的书籍

  • 如果是这种情况,那么这可能是您最大的问题。

    通常检查SQL以查看它产生了什么,您可以内联执行。有一个工具可以帮助您做到这一点,称为LinqPad,您可以创建LINQ查询并调整LINQ查询。此外,还可以查找添加索引的位置;这可以也会提升性能(太多索引可能会影响性能,因此也要小心).

    您可以通过不让我们滚动来优化它的可读性,作为一个起点…我还建议您以某种形式发布生成的SQL,理想情况下,发布查询执行计划和瓶颈。我使用linq to entities,如何获取生成的SQL?使用
    ObjectQuery.ToTraceString()
    或SQL探查器。LINQPad在这里也很有用。我已经为您重新格式化了它,但这样做表明此代码实际上不会编译。您需要自己修复它。这正是我要说的。@MemoryLeak要测试它,请拆分代码行并逐步查看哪一行代码似乎花费的时间最长。
     任何(
    选择都会让我困惑。
    IQueryable<WebEvent> mySearch = 
        eventDC.GetBooks()
            .Where(p => p.Price.Any(d => d.EventDatetime.Month == fromDate.Month 
                                         && d.EventDatetime.Year == fromDate.Year))
            .WithGroup(groupId)
            .OrderBy(p => p.Price.Where(r => r.Datetime >= fromDate)
                                 .OrderBy(q => q.Datetime)
                                 .FirstOrDefault().Datetime);
    List<Book>ventsList = mySearch.ToList<Book>();