1

これは私の簡単なリストです:

public class ProductStore
  {
      public List<Product> AllProducts
      {
          get
          {
              return new List<Product>
              {
                  new Product{Name = "Stove 1", Category= "Stoves", ID = 1, Price = 99.99},
                  new Product{Name = "Stove 2", Category= "Fireplaces", ID = 2, Price = 139.50},
                  new Product{Name = "Stove 3", Category= "Stoves", ID = 3, Price = 199.99},
                  new Product{Name = "Stove 4", Category= "Stoves", ID = 4, Price = 29.00},
              };
          }

      }
  }

これは、ビューでこれらのデータを印刷する方法です: @model List

@{
    ViewBag.Title = "AllProducts";
}

<h2>AllProducts</h2>
<ul>
@foreach (var product in Model)
{ 
     <li>Name: @product.Name, Category:@product.Category, Price:@product.Price;</li>
}
</ul>

私の質問は次のとおりです。カテゴリ == ストーブ? foreach で if ステートメントを continue と組み合わせて使用​​できることはわかっていますが、これを行うためのよりスマートな方法はあるのでしょうか?

4

3 に答える 3

7

純粋な MVC 実装では、これをコントローラーに配置する可能性がありますが、次のような LINQ クエリを使用して、ループする製品のリストをフィルター処理することができます...

@foreach (var product in Model.AllProducts.Where(p => p.Category == "Stoves").ToList())
{ 
     <li>Name: @product.Name, Category:@product.Category, Price:@product.Price;</li>
}
于 2013-10-16T20:57:42.660 に答える
4

@foreach (var product in Model.Where(x => x.Category == "Stoves"))

これは、構文的にどのように行うかです。しかし、プログラミングの問題として、おそらく何らかの方法で設計を変更したいと思うでしょう。リストをビューに渡す前に、おそらくリストをフィルター処理する必要があります。

MVC コントローラー アクションに基づいてビューを生成しています。これらのアクションは、次のようなクエリ文字列値などの条件付きパラメーターを取ることができます。

http://host:12345/Controller/Action?category=Stoves

これはアクションの関数パラメーターとして読み取られ、実際のリストのサブセットを返すために使用できます。

public ActionResult ViewProducts(string category = null)
{
    var products = productStore.AllProducts;

    if (category != null)
        products = products.Where(x => x.Category == category);

    return View(products);
}
于 2013-10-16T20:59:51.220 に答える
3

フィルタリングを行う別のプロパティが良いでしょう。

      public List<Product> StoveProducts
      {
          get
          {
              return AllProducts.Where(p => p.Category == "Stoves").ToList();
          }

      }
于 2013-10-16T20:57:03.907 に答える