C# 如何控制数量和增长

C# 如何控制数量和增长,c#,asp.net,ajax,web-services,C#,Asp.net,Ajax,Web Services,我使用webservice将产品添加到代码中 [WebMethod] public void calistir(int urunid, string GirenIp) { using (Models.DermabonEntities db = new Models.DermabonEntities()) { var productName = (from i in db.Product

我使用webservice将产品添加到代码中

[WebMethod]

    public void calistir(int urunid, string GirenIp)
    {
        using (Models.DermabonEntities db = new Models.DermabonEntities())
        {


            var productName = (from i in db.Product
                               where i.Id == urunid
                               select i.ProductName).FirstOrDefault();
            var productPrice = (from i in db.Product
                                where i.Id == urunid
                                select i.ProductPrice).FirstOrDefault();

            var productId = (from i in db.Product
                             where i.Id == urunid
                             select i.Id).FirstOrDefault();
            var productPic = (from i in db.Product
                              where i.Id == urunid
                              select i.ProductPicture).FirstOrDefault();

            var userIp = GirenIp;

            Basket create = new Basket();

            create.ProductName = productName;
            create.ProductId = productId;
            create.ProductPrice = productPrice;
            create.ProductPic = productPic;
            create.UserId = userIp;
            var qua = "2";
            create.ProductQuantity = Convert.ToInt32(qua);


            db.Basket.Add(create);
            db.SaveChanges();




        }

    }
这里我手动添加产品数量。但我想控制是否有相同的产品增加数量,如果没有数量1

我试过这样的东西

var CountProduct= db.Basket.FirstOrDefault();
            if (CountProduct.ProductId == urunid)
            {
                CountProduct.ProductQuantity += Convert.ToInt32(adet);
                create.ProductQuantity = Convert.ToInt32(adet);
                db.SaveChanges();
            }
GirenIp=sessionID来自ajax,urunId=ProductId来自ajax,adet表示数量

阿贾克斯

  function sepeteEkle(id) {

         var urunid = id;
         var GirenIp = $("#userId").val();
         $.ajax({
             dataType: "json",
             type: "POST",
             contentType: "application/json",
             url: "/Admin/WebService/Control.asmx/calistir",
             data: "{'urunid':'" + urunid + "','GirenIp':'" + GirenIp + "' }",
             success: function(){
                 $("#cartContent").load("MiniSepet.aspx #cartContent");
             },
             error: function () {
                 $("#cartContent").load("MiniSepet.aspx #cartContent");
             }
         });
         return false;
     }


     $(document).on('click', '.sepetat', function () {
         var nId = $(this).data("id")
         sepeteEkle(nId);
     });



sepetat= add to basket
篮子桌子

 public partial class Basket
{
    public int Id { get; set; }
    public string UserId { get; set; }
    public Nullable<int> ProductId { get; set; }
    public string ProductName { get; set; }
    public Nullable<double> ProductPrice { get; set; }
    public Nullable<int> ProductQuantity { get; set; }
    public string ProductPic { get; set; }
}
公共部分类篮
{
公共int Id{get;set;}
公共字符串用户标识{get;set;}
公共可为空的ProductId{get;set;}
公共字符串ProductName{get;set;}
公共可为空的ProductPrice{get;set;}
公共可为空的ProductQuantity{get;set;}
公共字符串ProductPic{get;set;}
}

}

您不希望在同一对象上运行多个LINQ查询,而只是为了获得多个属性。这将导致SQL代码运行多次(在您的示例中为4次)。只需获取一次对象并使用其属性

您还需要稍微清理一下,并使用以下简单模式:

public void calistir(int urunid, string GirenIp) 
{
    using(Models.DermabonEntities db = new Models.DermabonEntities()) 
    {
        // Find the product by primary key
        var product = db.Product.Find(urunid);
        if (product != null) 
        {
            var productName = product.ProductName;
            var productPrice = product.ProductPrice;
            var productId = urunid;
            var productPic = product.ProductPicture;

            var userIp = GirenIp;

            // Get existing basket entry if any based on session/user id and product id
            Basket basket = dn.basket.FirstOrDefault(x=>x.UserId == userIp && x.ProductId == productId);
            if (basket == null) 
            {
                // basket does not already exist, so add new basket
                basket = new Basket() 
                {
                    // You can use property assignment with constructors
                    ProductName = productName,
                    ProductId = productId,
                    ProductPrice = productPrice,
                    ProductPic = productPic,
                    UserId = userIp,
                    ProductQuantity = 1      // Your initial quantity
                }
                db.Basket.Add(basket);
            } 
            else 
            {
                // Existing basket, just increase the quantity
                basket.ProductQuantity++;
            }
            db.SaveChanges();
        }
    }
}
实际上并不需要大多数临时变量:

public void calistir(int urunid, string GirenIp) 
{
    using(Models.DermabonEntities db = new Models.DermabonEntities()) 
    {
        // Find the product by primary key
        var product = db.Product.Find(urunid);
        if (product != null) 
        {
            var userIp = GirenIp;

            // Get existing basket entry if any based on session/user id and product id
            Basket basket = dn.basket.FirstOrDefault(x=>x.UserId == userIp && x.ProductId == urunid);
            if (basket == null) 
            {
                // basket does not already exist, so add new basket
                basket = new Basket() 
                {
                    // You can use property assignment with constructors
                    ProductName = product.ProductName,
                    ProductId = product.ProductId,
                    ProductPrice = product.ProductPrice,
                    ProductPic = product.ProductPicture,
                    UserId = userIp,
                    ProductQuantity = 1      // Your initial quantity
                }
                db.Basket.Add(basket);
            } 
            else 
            {
                // Existing basket, just increase the quantity
                basket.ProductQuantity++;
            }
            db.SaveChanges();
        }
    }
}

我知道英语可能不是你的第一语言,但请使用
code
(非code)作为单数和复数。你不会用英语说“代码”(至少不是在源代码的上下文中,它是缩写)例如“这是我的代码”,“这里有一些代码”等等:)好的,谢谢你让我知道=)根据你的代码,你只有一个篮子供所有用户使用。。。我猜情况并非如此:)我将相应地调整代码。是的,我为所有用户都有一个篮子,我为每个用户创建会话ID并将其发送到篮子。因此我使用sessionIDOK控制篮子。您需要对下面的答案进行一些小的更改,但它显示了一个更好的模式,用于查找和修改对象。使用
Find
获取基于主键的单个记录。不要对单个属性反复调用LINQ查询(每个属性都是单独的SQL请求!)。