我在工作内部的设计集内某个区域的集合中有一个产品集合,我有很多嵌套的集合。
问题是我有多个相同的产品,具有不同的ID,我需要将它们组合成一个产品,这样,看纸的人犯的错误就会更少,而他们只能看数量。
因此,我需要合并产品,但实际上我只需要删除具有相同名称的任何产品,并将其数量添加到未删除的产品中。
我可以获取所有需要删除的列表,但不幸的是,该列表还包含了我不想删除的列表。
这是我到目前为止所拥有的:
我得到了产品列表
var ds = j.DesignSets;
IList<Product> productsList = new System.Collections.Generic.List<Product>();
foreach(var dsa in ds)
{
foreach(var p in dsa.DesignSetAreas)
{
foreach(var pr in p.Products)
{
if(pr.ProductMods.Count == 0)
{
if(pr.DeliveryCnt == 0)
{
productsList.Add(pr);
}
}
}
}
}
然后,我再次遍历所有内容,但是这次我在设计中创建了另一个列表,以列出要删除的产品。
我还循环浏览先前创建的列表,以查看是否有任何具有相同displayName的产品。
foreach(var dsa in ds)
{
var deleteProducts = new List<Product>();
foreach(var p in dsa.DesignSetAreas)
{
foreach(var pr in p.Products)
{
if(pr.ProductMods.Count == 0)
{
if(pr.DeliveryCnt == 0)
{
var partQuantity = 0;
var partAmount = 0;
foreach(var product in productsList)
{
if(pr.Display == product.Display)
{
partQuantity = partQuantity + product.Quantity;
partAmount++;
pr.Quantity = partQuantity;
}
}
if(partAmount >= 2)
{
deleteProducts.Add(pr);
}
}
}
}
foreach(var item in deleteProducts)
{
p.Products.Remove(item);
}
}
}
除了混乱之外,此代码还会添加所有具有相同名称的产品,然后将其删除。
我不介意代码是否一团糟,只要能够正常工作,我将尝试清理它。不过,如果您有关于如何清理的建议,我将不胜感激。
那么,这个问题。
如何获取此代码以删除除同一个产品之外的所有产品?
谢谢。
答案 0 :(得分:0)
我使用类来模拟您的混乱情况。然后应用Linq:
class Program
{
static void Main(string[] args)
{
Database j = new Database();
var ds = j.DesignSets;
List<Product> productsList = ds.Select(dsa => dsa.DesignSetAreas.Select(p => p.Products.Where(pr => (pr.ProductMods.Count == 0) && (pr.DeliveryCnt == 0))).SelectMany(x => x)).SelectMany(x => x).ToList();
var productNames = productsList.GroupBy(x => x.Name).Select(x => x.ToList()).ToList();
}
}
public class Database
{
public List<DesignSet> DesignSets { get; set; }
}
public class DesignSet
{
public List<DesignSetArea> DesignSetAreas { get; set; }
}
public class DesignSetArea
{
public List<Product> Products { get; set; }
}
public class Product
{
public List<string> ProductMods { get; set; }
public int DeliveryCnt { get; set; }
public string Name { get; set; }
}