以下の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 がこのクエリを舞台裏でどのように変換するかについて、より多くの洞察を持っている可能性のある他の人の考えを聞きたいと思っています。
ありがとう