0

MVC3 で結果フィルターを実装しようとしていますが、次のような問題に直面しています。

 public ActionResult  Index(int? SubID)
    {
        var product = db.Product.Where(s => s.SubID == SubID).Include(t => t.SubCategory);

        if (SubID.HasValue)
        {
            ViewBag.SubID = new SelectList(db.SubCategory, "SubID", "SubNameVN", SubID);                
        }
        else
        {
            ViewBag.SubID = new SelectList(db.SubCategory, "SubID", "SubNameVN");                
        }



        return View(product);
    }

上記のものは問題なく動作しますが、次のものは、どのような条件を付けたとしても、常にテーブル全体の結果を示します。

public ActionResult  Index(int? SubID)
    {
        var product = db.Product.Include(t => t.SubCategory);

        if (SubID.HasValue)
        {
            ViewBag.SubID = new SelectList(db.SubCategory, "SubID", "SubNameVN", SubID);                
            product.Where(s => s.SubID == SubID);
        }
        else
        {
            ViewBag.SubID = new SelectList(db.SubCategory, "SubID", "SubNameVN");                
        }



        return View(product);
    }

そして、これも機能しません:

public ActionResult  Index(int? SubID)
        {
            var product = from m in db.Product
                          select m;

            if (SubID.HasValue)
            {
                ViewBag.SubID = new SelectList(db.SubCategory, "SubID", "SubNameVN", SubID);                
                product.Where(s => s.SubID == SubID);
            }
            else
            {
                ViewBag.SubID = new SelectList(db.SubCategory, "SubID", "SubNameVN");                
            }

            product.Include(t => t.SubCategory);

            return View(product);
        }

では、これら 3 つのアプローチの違いを教えてください。また、なぜ 2 と 3 が機能しないのか説明してください。

4

1 に答える 1

4
product.Where(s => s.SubID == SubID);

...製品に条件を追加しません。条件が適用された IEnumerable を作成し、すぐに破棄します。あなたが望むのはおそらく;

product = product.Where(s => s.SubID == SubID);
于 2013-06-02T21:24:24.983 に答える