public IActionResult ModifiedProductsById(int id, [FromBody] Product product)
        {
            var products = new Product();
            ProductWebApiContext productWebApiContext = new ProductWebApiContext(conn.DefaultConnection);

            if (product == null)
            {
                return(BadRequest());
            }
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }
            if (id != 0)
            {
                products = (from p in productWebApiContext.Product where p.Id == id select p).FirstOrDefault();
                if (products != null)
                {
                    products.Name  = product.Name;
                    products.Price = product.Price;
                }

                productWebApiContext.SaveChanges();
            }
            return(Ok(products));
        }
        public IActionResult InsertProductsAndMaterials([FromBody] ProductMaterialInput input)
        {
            ProductWebApiContext productWebApiContext = new ProductWebApiContext(conn.DefaultConnection);

            if (input == null)
            {
                return(BadRequest());
            }
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }
            var maxId      = (from p in productWebApiContext.Product select p.Id).Max();
            var newProduct = new Product {
                Id    = ++maxId,
                Name  = input.Name,
                Price = input.Price,
            };
            var maxMaterialId = (from m in productWebApiContext.Material select m.Id).Max();
            var newMaterial   = new Material {
                Id        = ++maxMaterialId,
                Name      = input.Materials.First().Name,
                ProductId = maxId
            };

            productWebApiContext.Add(newProduct);
            productWebApiContext.Add(newMaterial);
            productWebApiContext.SaveChanges();
            return(Ok(newProduct));
        }
        public async Task <IActionResult> GetProducts(ResourceParameter parameter)
        {
            log.Info("获取所有的产品list");
            List <Product> products = new List <Product>();
            var            query    = products.AsQueryable();
            int            count    = 0;

            try {
                if (!_propertyMappingContainer.ValidMappingExistsFor <ResourceParameter, Product>(parameter.OrderBy))
                {
                    return(BadRequest("找不到要排序的字段"));
                }
                ProductWebApiContext productWebApiContext = new ProductWebApiContext(conn.DefaultConnection);
                var propertiesMap = new Dictionary <string, Expression <Func <Product, object> > >
                {
                    { "Id", p => p.Id },
                    { "Name", p => p.Name },
                    { "Price", p => p.Price }
                };
                if (!string.IsNullOrEmpty(parameter.Name))
                {
                    query = (from p in productWebApiContext.Product where p.Name.Contains(parameter.Name) select p)
                            .AsQueryable();
                    count = await(from p in productWebApiContext.Product where p.Name.Contains(parameter.Name) select p).CountAsync();
                }
                else
                {
                    query = (from p in productWebApiContext.Product select p)
                            .AsQueryable();
                    count = await(from p in productWebApiContext.Product select p).CountAsync();
                }

                query    = query.ApplySort(parameter.OrderBy, _propertyMappingContainer.Resolve <ResourceParameter, Product>());
                products = query.Skip(parameter.PageIndex * parameter.PageSize).Take(parameter.PageSize).ToList();
                var returnlist = new PaginatedList <Product>(parameter.PageIndex, parameter.PageSize, count, products);
                var preLink    = returnlist.HasPrevious
                    ? new CreateProductResourceUrl(_urlHelper).CreateResouceUrl(parameter, PaginationResourceUriType.PreviousPage,
                                                                                "GetProducts"):null;
                var nextLink = returnlist.HasNext
                    ? new CreateProductResourceUrl(_urlHelper).CreateResouceUrl(parameter, PaginationResourceUriType.NextPage,
                                                                                "GetProducts") : null;
                var mata = new
                {
                    returnlist.TotalItemsCount,
                    returnlist.PaginationBase.PageSize,
                    returnlist.PaginationBase.PageIndex,
                    returnlist.PageCount,
                    preLink,
                    nextLink
                };
                Response.Headers.Add("X-Pagination", JsonConvert.SerializeObject(mata));
            }
            catch (Exception e) {
                log.Error(e);
            }

            return(Ok(products));
        }
        public IActionResult GetProductByid(int id)
        {
            ProductWebApiContext productWebApiContext = new ProductWebApiContext(conn.DefaultConnection);
            //List<Product> products = (from p in productWebApiContext.Product where p.Id==id select p).ToList();
            var products = (from p in productWebApiContext.Product where p.Id == id select p).ToList();

            if (products.Count == 0)
            {
                return(NotFound());
            }
            return(Ok(products));
        }
        public async Task <IActionResult> DeleteProductsById(int productid)
        {
            ProductWebApiContext productWebApiContext = new ProductWebApiContext(conn.DefaultConnection);
            var product = await(from p in productWebApiContext.Product where p.Id == productid select p).ToListAsync();

            if (product == null)
            {
                return(NotFound());
            }
            productWebApiContext.Remove(product.FirstOrDefault());
            if (await productWebApiContext.SaveChangesAsync() <= 0)
            {
                return(StatusCode(500, $"删除产品{product.First().Id}失败"));
            }
            return(NoContent());
        }
        public IActionResult GetProductAndMaterial(int productid, int materialid)
        {
            ProductWebApiContext productWebApiContext = new ProductWebApiContext(conn.DefaultConnection);
            //List<Product> products = (from p in productWebApiContext.Product where p.Id==id select p).ToList();
            var products = (from p in productWebApiContext.Product
                            join m in productWebApiContext.Material on p.Id equals m.ProductId
                            where p.Id == productid
                            select new { Product = p, Material = m }).ToList();

            //var materials = (from m in productWebApiContext.Material where m.ProductId == productid && m.Id == materialid select m);
            if (products.Count == 0)
            {
                return(NotFound());
            }
            return(Ok(products));
        }
        public IActionResult DeleteMaterialById(int productid, int materialid)
        {
            ProductWebApiContext productWebApiContext = new ProductWebApiContext(conn.DefaultConnection);
            var product = (from p in productWebApiContext.Product where p.Id == productid select p).FirstOrDefault();

            if (product == null)
            {
                return(NotFound());
            }
            var material = (from m in productWebApiContext.Material where m.Id == materialid select m).FirstOrDefault();

            if (material == null)
            {
                return(NotFound());
            }
            productWebApiContext.Remove(material);
            productWebApiContext.SaveChanges();
            return(Ok());
        }
        public IActionResult InsertProductsCollection([FromBody] IEnumerable <Product> products)
        {
            ProductWebApiContext productWebApiContext = new ProductWebApiContext(conn.DefaultConnection);

            if (products == null)
            {
                return(BadRequest());
            }
            foreach (var product in products)
            {
                var maxId      = (from p in productWebApiContext.Product select p.Id).Max();
                var newProduct = new Product {
                    Id    = ++maxId,
                    Name  = product.Name,
                    Price = product.Price,
                };
                productWebApiContext.Add(newProduct);
                productWebApiContext.SaveChanges();
            }

            return(Ok());
        }
        public IActionResult InsertProductsById([FromBody] Product product)
        {
            ProductWebApiContext productWebApiContext = new ProductWebApiContext(conn.DefaultConnection);

            if (product == null)
            {
                return(BadRequest());
            }
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }
            var maxId      = (from p in productWebApiContext.Product select p.Id).Max();
            var newProduct = new Product {
                Id    = ++maxId,
                Name  = product.Name,
                Price = product.Price,
            };

            productWebApiContext.Add(newProduct);
            productWebApiContext.SaveChanges();
            return(Ok(newProduct));
        }