gpt4 book ai didi

c# - Entity Framework 中的可查询 Linq 查询差异

转载 作者:太空狗 更新时间:2023-10-29 22:37:12 24 4
gpt4 key购买 nike

我在 Entity Framework 中有一个非常简单的多对多表,将我的批准与我的交易联系起来(如下所示)。

enter image description here

我正在尝试在批准对象内部进行查询以计算批准的交易金额,这应该相对容易。

如果我做这样的事情,它会运行得非常快。

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 模型的外观

enter image description here

更新:

感谢所有回复,我认为我出错的地方是相信附加到 Approval 对象的集合将作为 IQueryable 执行。我将不得不对 dbContext 对象执行计数。

谢谢大家

最佳答案

var aCnt = from a in dbContext.Approvals
where a.id == id
select a.Transactions.Count;

EF自己编译查询,上面的查询会被编译为select count transactions

不像,

count = Transactions.AsQueryable<Transaction>().Count(); 
count = Transactions.Count;

这些将从事务中选择所有记录,然后计算计数

关于c# - Entity Framework 中的可查询 Linq 查询差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25201766/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com