请帮助我优化这个Linq语句

本文关键字:Linq 语句 优化 帮助 | 更新日期: 2023-09-27 18:10:54

可以帮助我优化以下LINQ语句。我使用NHibernate作为ORM。执行此语句需要一分钟以上的时间。不应该花那么多时间。

 var inValidIntroductionDates = environment.IntroductionDateInfo.IntroductionDateDetails
                                .OrderByDescending(x => x.ApplicationDate)
                                .Where(x => x.VaccineDetail.Id == vaccine.Id &&
                                            x.ViewInfo.Id == viewInfoDetail.ViewInfo.Id &&
                                            x.MasterForecastInfo.Id == scenarioId &&
                                            x.IsIntroductionDateValid == false)
                                .ToList();

感谢

请帮助我优化这个Linq语句

Where子句移到OrderByDescending之前,以减少按语句参与订单的记录数。像

var inValidIntroductionDates = environment.IntroductionDateInfo.IntroductionDateDetails
                               .Where( x => x.VaccineDetail.Id == vaccine.Id && 
                                     x.ViewInfo.Id == viewInfoDetail.ViewInfo.Id && 
                                     x.MasterForecastInfo.Id == scenarioId && 
                                     x.IsIntroductionDateValid == false)
                                .OrderByDescending(x => x.ApplicationDate)
                                .ToList();

您还可以更改

 x.IsIntroductionDateValid == false

 !x.IsIntroductionDateValid 

但这并不能提高性能。只是一个现成的选项。

var inValidIntroductionDates = environment.IntroductionDateInfo.IntroductionDateDetails.Where(
                        x => x.VaccineDetail.Id == vaccine.Id && x.ViewInfo.Id == viewInfoDetail.ViewInfo.Id && x.MasterForecastInfo.Id == scenarioId && x.IsIntroductionDateValid == false).OrderByDescending(x => x.ApplicationDate).ToList();

先查找,然后订购

需要考虑的一些事项:

  • 请在您的数据库中附加一个探查器,并告诉我们发送到数据库的语句
  • 查明语句执行速度是否较慢,或者nHibernate处理是否需要时间
  • 如果是数据库查询:优化语句(例如索引、执行计划…(
  • 如果执行了太多查询:对抗n+1
  • 如果是nHibernate执行:关闭nHibernat日志记录

请告诉我们重点是什么。

谨致问候,Michael