请帮我优化这个Linq声明

时间:2013-04-26 06:32:35

标签: c# nhibernate fluent-nhibernate

可以帮助我优化以下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();

由于

3 个答案:

答案 0 :(得分:1)

Where之前移动OrderByDescending子句,以减少参与order by语句的记录数。喜欢

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 

但这不会改善表现。只是一个可读性选项。

答案 1 :(得分:1)

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();

首先找到,然后订购

答案 2 :(得分:1)

需要考虑的一些事项:

  • 请将分析器附加到您的数据库并告诉我们具体如何 发送到数据库的语句
  • 查明语句是否执行缓慢或nHibernate处理是否花费时间
  • 如果是数据库查询:对语句进行优化(例如索引,执行计划,......)
  • 如果执行的查询太多:打击n + 1
  • 如果是nHibernate执行:关闭nHibernate日志记录

请告诉我们重点是什么。

此致 迈克尔