Chr*_*end 5 c# sql linq entity-framework
我在实体框架中有一个非常简单的多对多表,将我的批准连接到我的交易(如下所示).

我正在尝试在批准对象内部进行查询以计算批准中的事务量,这应该相对容易.
如果我做这样的事情,那么它的工作速度非常快.
int count;
EntitiesContainer dbContext = new EntitiesContainer ();
var aCnt = from a in dbContext.Approvals
where a.id == id
select a.Transactions.Count;
count = aCnt.First();
Run Code Online (Sandbox Code Playgroud)
但是,当我这样做
count = Transactions.Count;
Run Code Online (Sandbox Code Playgroud)
或这个
count = Transactions.AsQueryable<Transaction>().Count();
Run Code Online (Sandbox Code Playgroud)
它非常慢.我已经跟踪了在服务器上运行的sql,它确实似乎试图加载所有事务而不是仅对事务集合执行COUNT查询.
任何人都可以向我解释原因吗?
附加:以下是EF模型对这两个类的看法

更新:
感谢所有回复,我相信我出错的地方是认为附加到Approval对象的集合将作为IQueryable执行.我将不得不对dbContext对象执行计数.
感谢大家.
var aCnt = from a in dbContext.Approvals
where a.id == id
select a.Transactions.Count;
Run Code Online (Sandbox Code Playgroud)
EF自己编译查询,上面的查询将被编译为select count事务
不同的是,
count = Transactions.AsQueryable<Transaction>().Count();
count = Transactions.Count;
Run Code Online (Sandbox Code Playgroud)
这些将从事务中选择所有记录,然后计算计数
当您访问该a.Transactions属性时,您将加载事务列表(延迟加载)。如果你想获得Count唯一的,那么使用这样的东西:
dbContext.Transactions.Where(t => t.Approvals.Any(ap => ap.Id == a.Id)).Count();
Run Code Online (Sandbox Code Playgroud)
哪里a给予批准。
| 归档时间: |
|
| 查看次数: |
678 次 |
| 最近记录: |