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);
    }
}