IQueryable查询数据计数

时间:2012-04-02 01:16:37

标签: c# count iqueryable

我正在尝试获取项目的计数,因为我正在将查询应用于IQueryable。

我想尝试这样做:

this.lblSth.Text = new Repository<Sth>().GetAll().Where(p => p.PersonId == personId).ToList().Count().ToString();

我认为这会获取整个条件中的所有数据并获取对象,然后它会计算;所以我很好奇,例如我是否只需要将Id列转换为列表或其他智能方式;计数操作会更快?

信息:GetAll()=&gt;它是一个存储库模式方法,它从linqToSql数据实体返回IQueryable对象。

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

3 个答案:

答案 0 :(得分:1)

如果您想更快地执行此操作,请不要致电ToList()

this.lblSth.Text = new Repository<Sth>().GetAll()
                                        .Where(p => p.PersonId == personId)
                                        .Count()
                                        .ToString();

这样,(假设它是一个SQL支持的IQueryable<T>),它将像您的方法一样执行SELECT COUNT(*) FROM …之类的查询,而不是SELECT * FROM …。此查询应该更快。

答案 1 :(得分:1)

我认为对Where和ToList的调用是多余的。 见下文。

this.lblSth.Text = new Repository<Sth>().GetAll().Count(p => p.PersonId == personId).ToString();

答案 2 :(得分:0)

ToList()将执行查询并将您的IQUeryable转换为IEnumerable。我会在where子句中调用count。这样,Count将成为最终查询的一部分