我正在尝试使用EntityFramework和Linq从下面的方法中获取总记录数。返回计数很慢。
public static int totalTracking(int id)
{
using (var ctx = new GPEntities())
{
var tr = ctx.Tracking
.Where(c => c.clientID == Config.ClientID)
.Where(c => c.custID == id)
.Where(c => c.oOrderNum.HasValue)
.ToList();
return tr.Count();
}
}
最佳答案
您可以大大简化查询:
using (var ctx = new GPEntities())
{
return ctx.Tracking
.Where(c => c.clientID == Config.ClientID)
.Where(c => c.custID == id)
.Where(c => c.oOrderNum.HasValue)
.Count();
}
当您调用
ToList
时,这将触发实现,因此将向数据库发出查询,并将检索所有列。实际计数将在客户端上发生。如果只执行
Count
,而没有ToList
,则在调用Count
时将发出查询,并且服务器将仅返回一个数字,而不是表。这对性能并不是很关键,但是我认为如果没有那么多
Where
,代码看起来会有些不错:using (var ctx = new GPEntities())
{
return ctx.Tracking
.Where(c =>
c.clientID == Config.ClientID &&
c.custID == id &&
c.oOrderNum.HasValue)
.Count();
}
甚至
using (var ctx = new GPEntities())
{
return ctx.Tracking
.Count(c =>
c.clientID == Config.ClientID &&
c.custID == id &&
c.oOrderNum.HasValue);
}