このクエリは少し前に弊社のシステムで作成されたものですが、データが少し増えると、このクエリのパフォーマンスが低下します。私の調査では、( CodeCount
) クエリが別のサブクエリを起動し、実行に大幅な遅延を引き起こしていることがわかりました。この Linq クエリを最適化する必要があります。どんな助けでも大歓迎です
from batch in Context.VoucherCodeBatch.ToList()
join type in Context.VoucherCodeType on batch.VoucherTypeId equals type.VoucherTypeId
join voucher in Context.Voucher on batch.VoucherCodeBatchId equals voucher.VoucherCodeBatchId
where batchIds.Contains(batch.BatchCode)
group new
{
batch.BatchCode,
batch.CreationDate,
type.VoucherTypeName,
voucher.AllowedCount,
voucher.ValidFrom,
voucher.ValidTo,
batch.VoucherCodeBatchId,
voucher.VoucherCode
}
by new { batch.BatchCode }
into uniquebatch
select new Batch
{
BatchCode = uniquebatch.FirstOrDefault().BatchCode,
CreationDate = uniquebatch.FirstOrDefault().CreationDate,
TimesAllowed = uniquebatch.FirstOrDefault().AllowedCount,
ValidFrom = uniquebatch.FirstOrDefault().ValidFrom,
CodeCount = ((from c in Context.Voucher.ToList()
where
c.VoucherCodeBatchId ==
uniquebatch.FirstOrDefault().VoucherCodeBatchId
select c).Count()),
ValidTo = uniquebatch.FirstOrDefault().ValidTo,
CodeType = uniquebatch.FirstOrDefault().VoucherTypeName,
VoucherCodeBatchId = uniquebatch.FirstOrDefault().VoucherCodeBatchId
});