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。

我对各种不同的想法都持开放态度。感谢

IQueryable查询的数据计数

我认为对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将成为最终查询的一部分