Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在会话中存储的列表中唯一显示产品_C# - Fatal编程技术网

C# 如何在会话中存储的列表中唯一显示产品

C# 如何在会话中存储的列表中唯一显示产品,c#,C#,这是我在网格列表中显示数据的代码。它显示数据,但也复制产品。所以,请给我一个独特展示产品的方法 如果我将新产品添加到购物车,请复制以前添加的产品 private List<Cart> PopulateData() { DataTable dt = new DataTable(); dt = (DataTable)Session["Test"]; List<Cart> Product = new List<Cart>()

这是我在网格列表中显示数据的代码。它显示数据,但也复制产品。所以,请给我一个独特展示产品的方法 如果我将新产品添加到购物车,请复制以前添加的产品

private List<Cart> PopulateData()
{

    DataTable dt = new DataTable();       
    dt = (DataTable)Session["Test"];

    List<Cart> Product = new List<Cart>();

    if (Session["key"] == null)
    {

       foreach (DataRow row in dt.Rows)
       {
           string Quantity = Request.QueryString["Quantity"];

           float f_num = float.Parse(row["ProductPrice"].ToString());
           Cart cr = new Cart();
           Product.Add(new Cart { ProductName = row["ProductName"].ToString(), ProductPrice = f_num, Quantity = Convert.ToInt32(Quantity), Type = row["Type"].ToString() });
       }

   }
   else if(Session["key"]!=null)
   {
       Product = (List<Cart>)Session["key"];
       foreach (DataRow row in dt.Rows)
       {
           string Quantity = Request.QueryString["Quantity"];

           float f_num = float.Parse(row["ProductPrice"].ToString());
           Cart cr = new Cart();
           Product.Add(new Cart { ProductName = row["ProductName"].ToString(), ProductPrice = f_num, Quantity = Convert.ToInt32(Quantity), Type = row["Type"].ToString() });
       }

   }
   Session["key"] = Product;
    return Product;
}
private List PopulateData()
{
DataTable dt=新的DataTable();
dt=(数据表)会话[“测试”];
列表产品=新列表();
if(会话[“键”]==null)
{
foreach(数据行中的数据行)
{
字符串数量=请求。查询字符串[“数量”];
float f_num=float.Parse(行[“ProductPrice”].ToString());
购物车cr=新购物车();
Product.Add(新购物车{ProductName=row[“ProductName”].ToString(),ProductPrice=f_num,QUOTE=Convert.ToInt32(数量),Type=row[“Type”].ToString());
}
}
else if(会话[“键]!=null)
{
产品=(列表)会话[“键];
foreach(数据行中的数据行)
{
字符串数量=请求。查询字符串[“数量”];
float f_num=float.Parse(行[“ProductPrice”].ToString());
购物车cr=新购物车();
Product.Add(新购物车{ProductName=row[“ProductName”].ToString(),ProductPrice=f_num,QUOTE=Convert.ToInt32(数量),Type=row[“Type”].ToString());
}
}
会话[“密钥”]=产品;
退货产品;
}
在else部分(您已经从会话中添加了数据),您必须检查该行是否在会话中,然后不要基于某些“唯一ID”将其添加到您的
产品
类中

 else {
   Product = (List<Cart>)Session["key"];
   foreach (DataRow row in dt.Rows)
   {
       string Quantity = Request.QueryString["Quantity"];
       var uniqueid = Convert.ToInt32(row["productId"]);
       //Linq to find if the product list has the same item
       bool containsItem = Product.Any(item => item.ProductId == uniqueid); 
       var uniqueid = Convert.ToInt32(row["uniqueId"]);

       bool containsItem = Product.Any(item => item.UniqueProperty == uniqueid); 
       float f_num = float.Parse(row["ProductPrice"].ToString());
       Cart cr = new Cart();
       if(containsItem) {
       Product.Add(new Cart { ProductName = row["ProductName"].ToString(), ProductPrice = f_num, Quantity = Convert.ToInt32(Quantity), Type = row["Type"].ToString() });
      }
   }
}
else{
产品=(列表)会话[“键];
foreach(数据行中的数据行)
{
字符串数量=请求。查询字符串[“数量”];
var uniqueid=Convert.ToInt32(行[“productId]”);
//Linq查找产品列表中是否有相同的项目
bool containsItem=Product.Any(item=>item.ProductId==uniqueid);
var uniqueid=Convert.ToInt32(行[“uniqueid]”);
bool containsItem=Product.Any(item=>item.UniqueProperty==uniqueid);
float f_num=float.Parse(行[“ProductPrice”].ToString());
购物车cr=新购物车();
if(containsItem){
Product.Add(新购物车{ProductName=row[“ProductName”].ToString(),ProductPrice=f_num,QUOTE=Convert.ToInt32(数量),Type=row[“Type”].ToString());
}
}
}

编辑:代码现在已更改。检查正确的Productid属性和字段名

将产品列表分配给会话时,可以使用linq查询简化不同的记录

在这条线上

    Session["key"] = Product;
你可以像这样做

Session["key"] = Product.GroupBy(x => new { x.Quantity, x.ProductName, x.ProductPrice }).Select(x=>x.Key).ToList();


找到这个url@Praveen不确定这个问题。您想在会话中只存储唯一的项吗?嗨,Junaid,我想在gridview中绑定唯一的数据。我的代码只是复制了以前添加的数据。因此退货产品应该只返回唯一的元素。如果不能确保只添加尚未存在的元素,那么就需要使用linq。您是否有任何字段名表明这些产品是相同的?它在下面的行中给出了错误,请建议如何解决错误------bool containsItem=Product.any(item=>item.UniqueProperty==uniqueid)
UniqueProperty
是您的唯一id(产品密钥或其他)的名称uniqueid是您在记录中拥有的某个唯一id,您必须基于您在记录中拥有的唯一id构造相同的逻辑。不要只是复制粘贴代码我是c的新手,所以请根据我的代码建议我应该使用什么UniqueProperty在
产品
类中是否有唯一的id字段(如“产品id”)?如果是,则使用它而不是代码中的“uniqueid”。否!您是否有用于产品表的产品id或主键?我尝试了这两种方法,但都出现了错误。因此,请建议hoe克服它。@Ruchir——无法将“System.Collections.Generic.List”类型的对象强制转换为“System.Collections.Generic.List”
1[f_uAnonymousType0
3[System.Int32,System.String,System.Single]],“键入”System.Collections.Generic.List`1[Cart]----这是一个错误,它显示plz帮助您需要按如下所示强制转换对象:
Session[“key”]=Product.GroupBy(x=>new{x.ProductId,x.ProductName})。选择(x=>new Cart{ProductId=x.Key.ProductId,ProductName=x.Key.ProductName})。ToList()您可以在
Select()
Session["key"] = Product.Select(x => new { Quantity = x.Quantity, ProductName=x.ProductName, ProductPrice=x.ProductPrice }).Distinct();