我在实体框架中有一个非常简单的多对多表格,将我的批准与我的交易连接起来(如下图所示)。
我正在尝试在批准对象内部进行查询,以计算批准上的交易数量,这应该相对容易。
如果我像这样做,它就会非常快速。
然而,当我这样做时,
它非常缓慢。我已经追踪了服务器上运行的SQL,它确实似乎试图加载所有交易而不仅仅是在交易集合上执行COUNT查询。
有人能解释一下为什么吗?
附加:
以下是这两个类相关的EF模型的样子
更新:
感谢所有回答,我相信我错在相信连接到Approval对象的集合将作为IQueryable执行。我将不得不对dbContext对象执行计数。
谢谢大家。
![enter image description here](https://istack.dev59.com/PQJf4.webp)
如果我像这样做,它就会非常快速。
int count;
EntitiesContainer dbContext = new EntitiesContainer ();
var aCnt = from a in dbContext.Approvals
where a.id == id
select a.Transactions.Count;
count = aCnt.First();
然而,当我这样做时,
(然而当我这样做时)
count = Transactions.Count;
或者这个
count = Transactions.AsQueryable<Transaction>().Count();
它非常缓慢。我已经追踪了服务器上运行的SQL,它确实似乎试图加载所有交易而不仅仅是在交易集合上执行COUNT查询。
有人能解释一下为什么吗?
附加:
以下是这两个类相关的EF模型的样子
更新:
感谢所有回答,我相信我错在相信连接到Approval对象的集合将作为IQueryable执行。我将不得不对dbContext对象执行计数。
谢谢大家。
Transactions
的类型是什么:count = Transactions.Count;
? - romanozaTransactions
对象的实际类型是什么?也就是说,调用Transactions.GetType()
并告诉我们类型名称。 - Jean Hominal