C# 如何控制数量和增长
我使用webservice将产品添加到代码中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
[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请求!)。