我正在尝试获取项目的计数,因为我正在将查询应用于IQueryable。
我想尝试这样做:
this.lblSth.Text = new Repository<Sth>().GetAll().Where(p => p.PersonId == personId).ToList().Count().ToString();
我认为这会获取整个条件中的所有数据并获取对象,然后它会计算;所以我很好奇,例如我是否只需要将Id列转换为列表或其他智能方式;计数操作会更快?
信息:GetAll()=&gt;它是一个存储库模式方法,它从linqToSql数据实体返回IQueryable对象。
我对各种不同的想法持开放态度。感谢
答案 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将成为最终查询的一部分