Asp.net >
为什么会发生这种情况?在Asp.net >,asp.net,sql-server,asp.net-mvc,entity-framework-6,Asp.net,Sql Server,Asp.net Mvc,Entity Framework 6,为什么会发生这种情况?在Linq中,suppliers.Count()实际上在数据库中执行查询 你有两次,所以这已经解释了其中的两次 - 编辑 最后一次复制就像您所说的那样,是通过Linq中的ToPagedList方法完成的,suppliers.Count()实际执行数据库中的查询 你有两次,所以这已经解释了其中的两次 - 编辑 最后一次复制就像你说的那样,是通过ToPagedList方法完成的,这是他正在做的计数的3倍。我很确定suppliers.Count()实际上执行了一个查询,这个查询已
Linq
中,suppliers.Count()
实际上在数据库中执行查询
你有两次,所以这已经解释了其中的两次
-
编辑
最后一次复制就像您所说的那样,是通过
Linq中的ToPagedList
方法完成的,suppliers.Count()
实际执行数据库中的查询
你有两次,所以这已经解释了其中的两次
-
编辑
最后一次复制就像你说的那样,是通过ToPagedList
方法完成的,这是他正在做的计数的3倍。我很确定suppliers.Count()
实际上执行了一个查询,这个查询已经解释了其中的两个。最后一个显然是ToList
奇怪的事实是,如果我设置一个变量int count=suppliers.count()
并在我的方法中到处使用它,我仍然会看到这3次……不,我错了,现在只有两次,我的坏!那么这就解决了吗?还是还是有一个太多了?现在是两次了,但我只有一个.count()
函数,这是他计数的三倍。我很确定suppliers.Count()
实际上执行了一个查询,这个查询已经解释了其中的两个。最后一个显然是ToList
奇怪的事实是,如果我设置一个变量int count=suppliers.count()
并在我的方法中到处使用它,我仍然会看到这3次……不,我错了,现在只有两次,我的坏!那么这就解决了吗?还是还有一个太多了?现在是两次了,但我只有一个.count()
函数
public ProsecMdmEntities()
: base("name=ProsecMdmEntities")
{
this.Database.Log = s => System.Diagnostics.Debug.WriteLine("Custom log: " + s);
}
public class SuppliersController : Controller
{
private ProsecMdmEntities db = new ProsecMdmEntities();
// GET: Suppliers
public ActionResult Index()
{
return View(db.Suppliers.ToList());
}
protected override void Dispose(bool disposing)
{
if (disposing)
{
db.Dispose();
}
base.Dispose(disposing);
}
}
public class SuppliersController : Controller
{
private ProsecMdmEntities db = new ProsecMdmEntities();
// GET: Suppliers
public ActionResult Index(string searchFilter, string sortOrder, int? page)
{
// Sort
ViewBag.IdSortParam = String.IsNullOrEmpty(sortOrder) ? "id_desc" : "";
ViewBag.CodeSortParam = sortOrder == "code_asc" ? "code_desc" : "code_asc";
ViewBag.NameSortParam = sortOrder == "name_asc" ? "name_desc" : "name_asc";
ViewBag.CurrentSort = sortOrder;
// Init
IQueryable<Supplier> suppliers = null;
// Search
if (!String.IsNullOrEmpty(searchFilter))
suppliers = db.Suppliers.Where(
s => s.SupplierCode.Contains(searchFilter) || s.SupplierName.Contains(searchFilter));
else
suppliers = db.Suppliers; // Default list
ViewBag.CurrentFilter = searchFilter;
// OrderBy
switch (sortOrder)
{
case "id_desc":
suppliers = suppliers.OrderByDescending(s => s.Id);
break;
case "code_asc":
suppliers = suppliers.OrderBy(s => s.SupplierCode);
break;
case "code_desc":
suppliers = suppliers.OrderByDescending(s => s.SupplierCode);
break;
case "name_asc":
suppliers = suppliers.OrderBy(s => s.SupplierName);
break;
case "name_desc":
suppliers = suppliers.OrderByDescending(s => s.SupplierName);
break;
default:
suppliers = suppliers.OrderBy(s => s.Id);
break;
}
int pageSize = 50;
int pageMax = (suppliers.Count() / pageSize) + (suppliers.Count() % pageSize > 0 ? 1 : 0);
int pageNumber = (page == null || page <= 0 ? 1 : (page > pageMax ? pageMax : (int)page));
return View(suppliers.ToPagedList(pageNumber, pageSize));
}
protected override void Dispose(bool disposing)
{
if (disposing)
{
db.Dispose();
}
base.Dispose(disposing);
}
}