当我只需要Count时,为什么Linq to Sql使SELECT *而不是SELECT COUNT(*)?

时间:2015-10-02 11:14:24

标签: entity-framework linq-to-sql

我们使用实体框架,每当我们在数据库实体的子集合上使用Count()时,这会导致严重的性能问题。 作为解决方法,我使用了数据上下文的根集合的连接。然后生成的sql查询使用所需的COUNT(*)。但这个解决方案真的很难看。

慢查询是:

var booked = erf.Sessions.All(s => s.Exams.All(e => e.Candidates.Count() >= e.CandidatesExpected))

1 个答案:

答案 0 :(得分:1)

如果通过&#34;子集合&#34;你的意思是你的实体中定义的Count()类型的导航属性,然后它是Linq-to-Entities(不是你指定的Linq-to-Sql)。因此,Enumerable方法只是listView = (ListView) findViewById(R.id.list_data); ArrayList<Contact> mList = new ArrayList<>(); mList = DB.getAllContacts(); 类中定义的扩展方法,它在已经实现到内存中的实体上执行。要获得您期望的结果,您需要在DbSet查询上使用Count()。