【发布时间】:2023-03-12 15:44:01
【问题描述】:
我正在尝试使用 LINQ to Entity 执行以下查询,但遇到了性能问题。结果返回大约需要 2-3 分钟。我需要关于如何提高这些查询的性能的建议
这是我用来计算特定日期之间订单总数的方法。数据在此处分为两个表。我需要从一个表中获取交易编号,然后使用这些交易提取订单并将它们汇总,但是对于某些条件来说查询太慢了,因为我在第一个查询中返回了大约 10k+ 条记录。
public int GetOrderQuantity(List<int> TransactionNumbers, DateTime FromDate, DateTime ToDate)
{
List<int> transactions = _context.RP_PART_TRANSACTIONS.Where(trd => TransactionNumbers.Contains(trd.TRANSACTION_NUMBER) && trd.TRANSACTION_DATE >= FromDate && trd.TRANSACTION_DATE <= ToDate).Select(tr => tr.TRANSACTION_NUMBER).ToList();
return _context.RP_PART_TRANSACTION_DETAILS.Where(trd => transactions.Contains(trd.TRANSACTION_NUMBER)).Select(tr => tr.PART_QTY).ToList().Sum();
}
【问题讨论】:
-
您是否尝试使用
IQueryable<int> transactions = .... .Select(tr => tr.TRANSACTION_NUMBER)?没有 ToList() 方法,防止数据库服务器重复选择。 -
如果执行两次查询,第二次执行是否很快?
-
您真的需要 2 个查询吗?
TransactionNumbers列表中大约有多少项目? -
@VMA 现在会试试这个
-
@G1P 这就是我的意思,这需要很长时间,因为您的 L2E 是生成的,而不是因为查询本身。
TransactionNumbers中有多少项?我怀疑这是你的罪魁祸首
标签: c# entity-framework linq oracle11g