IQueryable查询的数据计数
本文关键字:数据 查询 IQueryable | 更新日期: 2023-09-27 18:29:38
在将查询应用于IQueryable时,我正在尝试获取项的计数。
我试着这样做:
this.lblSth.Text = new Repository<Sth>().GetAll().Where(p => p.PersonId == personId).ToList().Count().ToString();
我认为这会获取整个条件下的所有数据,并获取对象,然后获取计数;所以我很好奇,例如,我是否只取Id列并将其强制转换到列表中,或者其他一些聪明的方法;计数操作会更快吗?
Info:GetAll()=>它是一个存储库模式方法,从linqToSql数据实体返回IQueryable对象T。
我对各种不同的想法都持开放态度。感谢
我认为对Where和ToList的调用是多余的。请参见下文。
this.lblSth.Text = new Repository<Sth>().GetAll().Count(p => p.PersonId == personId).ToString();
如果您想更快地完成此操作,请不要调用ToList()
:
this.lblSth.Text = new Repository<Sth>().GetAll()
.Where(p => p.PersonId == personId)
.Count()
.ToString();
这样,(假设它是SQL支持的IQueryable<T>
)它将执行类似于SELECT COUNT(*) FROM …
的查询,而不是像您的方法那样执行SELECT * FROM …
。而且这个查询应该更快。
ToList()将执行查询并将IQUeryable转换为IEnumerable。我要求对where条款进行计数。这样,Count将成为最终查询的一部分