我正在尝试优化以下 LINQ 查询以提高其速度性能。它正在搜索的对象数量可能达到数万。
var lQuery = from o in oEvents
where (o.oSalesEvent != null && o.oSalesEvent.OccurDate < oCalcMgr.OccurDate && (
(oCalcMgr.InclTransTypes == Definitions.TransactionTypes.SalesAll) ?
(o.oSalesEvent.EventStateID == ApprovedID || o.oSalesEvent.EventStateID == PendingID) :
o.oSalesEvent.EventStateID == ApprovedID)) &&
((oCalcMgr.InclTransTypes == Definitions.TransactionTypes.SalesAll) ?
(o.oSalesMan.oEmployment.EventStateID == ApprovedID || o.oSalesMan.oEmployment.EventStateID == PendingID) :
o.oSalesMan.oEmployment.EventStateID == ApprovedID)
select new { SaleAmount = o.SaleAmount.GetValueOrDefault(), CompanyID = o.oSalesEvent.CompanyID };
查询基本上是说,给我某个日期之前发生的所有销售事件的销售额和公司 ID。销售活动的状态和推销员的就业状态应该始终是“已批准”,或者如果指定,它们也可以是“待定”。
如您所见,有一个日期比较和几个整数比较。使用哪个整数比较取决于属性是否匹配某个 Enum 值。
我对如何进行优化有一些自己的想法,但我想听听其他人的想法,他们可能对 LINQ 如何在幕后翻译这个查询有更深入的了解。
谢谢