public IEnumerable <ViewProduct> GetProducts(string otherOptions)
        {
            using (var db = new MvvmSampleEntities())
            {
                var results =
                    from p in (from p in db.Products select p).ToList()
                    select ViewProduct.FromProduct(p);

                return(results);
            }
        }
        // GET: Products
        public ActionResult Index()
        {
            ViewBag.Title = "Products";

            using (var db = new MvvmSampleEntities())
            {
                var results =
                    from p in (from p in db.Products select p).ToList()
                    select Data.ViewModels.ViewProduct.FromProduct(p);

                return View(results);
            }
        } // end function
        public static async Task <IEnumerable <ViewProduct> > GetProductsAsync()
        {
            return(await Task.Run(() => {
                using (var db = new MvvmSampleEntities())
                {
                    var results =
                        from p in  (from p in db.Products select p).ToList()
                        select Data.ViewModels.ViewProduct.FromProduct(p);

                    return results.ToList();
                }
            }));
        } // end function
        public Models.SaveResult SaveProduct(ViewProduct product)
        {
            using (var db = new MvvmSampleEntities())
            {
                var target = new Product();
                db.Products.Add(target);
                target.SetProperties(product);

                db.SaveChanges();
            } // end using(db)

            return(new Models.SaveResult {
                success = true
            });
        } // end function
        public ActionResult NewItem(ViewProduct product)
        {
            ViewBag.Title = "New Product Item";

            using (var db = new MvvmSampleEntities())
            {
                var target = new Product();
                db.Products.Add(target);
                target.SetProperties(product);

                db.SaveChanges();
            } // end using(db)

            // このサンプルでは、製品の登録が完了すると、Productsページにリダイレクトします。
            //「登録しました」ページを表示する場合は、そのことを表示するビューの表示を用意してViewを返すように変更します。
            return new RedirectResult("~/Products");
        } // end function
        } // end function

        public static async Task SaveProductAsync(ViewProduct product)
        {
            using (var db = new MvvmSampleEntities())
            {
                Product target = null;
                if (product.Id > 0)
                {
                    target = (from p in db.Products where p.Id == product.Id select p).FirstOrDefault();
                }// end if

                if (target == null)
                {
                    target = new Product();
                    db.Products.Add(target);
                } // end if

                target.SetProperties(product);

                await db.SaveChangesAsync();
            } // end using(db)
        }     // end function
        } // end function

        // GET: Item/10
        public ActionResult Item(int id)
        {
            ViewBag.Title = "Product Item";

            using (var db = new MvvmSampleEntities())
            {
                var results =
                    from p in (from p in db.Products where p.Id == id select p).ToList()
                    select Data.ViewModels.ViewProduct.FromProduct(p);

                var item = results.FirstOrDefault();

                if ( item == null)
                {
                    // このサンプルでは、指定された Id の Product が見つからないときに、Productsページにリダイレクトします。
                    //「見つかりません」ページを表示する場合は、専用のページにリダイレクトするように変更します。
                    return new RedirectResult("~/Products");
                } // end if

                return View(item);
            }
        } // end function