使用笛卡尔积生成sku
/// <summary>
/// 生成SKU价格表
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
public Result<IList<SkuGroup>> GeneratePriceList(IList<SkuGroup> model)
{
try {
var result = new List<SkuGroup>();
var data = new SkuGroup();
data.Items = new List<SkuItem>();
//过滤掉无效的SkuGroup
model = model.Where(x => x.Items != null && x.Items.Count > ).ToList();
Descartes(model, , result, data);
return new Result<IList<SkuGroup>>(true, "操作成功!", result);
//return result;
}
catch (Exception ex)
{
//LogException(ex);
return new Result<IList<SkuGroup>>(false, "操作失败!");
} }
/// <summary>
/// 笛卡尔积
/// </summary>
/// <param name="list"></param>
/// <param name="count"></param>
/// <param name="result"></param>
/// <param name="data"></param>
/// <returns></returns>
public IList<SkuItem> Descartes(IList<SkuGroup> list,int count, IList<SkuGroup> result, SkuGroup data)
{
var temp = new List<SkuItem>();
//获取当前SkuGroup
var astr = new SkuGroup();
astr = list[count];
var group = new SkuGroup();
group.Id = astr.Id;
group.Name = astr.Name;
group.Selected = astr.Selected;
group.ItemType = astr.ItemType;
//循环当前SkuGroup的Items
foreach (var item in astr.Items)
{
item.Group = group;
if (count + < list.Count)
{
//中转,以达成传输本层及上层的item
var transfer = new SkuGroup();
transfer.Items = new List<SkuItem>();
foreach (var i in data.Items)
{
transfer.Items.Add(i);
}
transfer.Items.Add(item);
Descartes(list, count + , result, transfer);
}
else
{
var sku = new SkuGroup();
sku.Items = new List<SkuItem>();
//var items = new List<SkuItem>();
//存入上层的item
foreach (var i in data.Items)
{
sku.Items.Add(i);
}
//存入本次item
sku.Items.Add(item);
result.Add(sku);
}
} return temp;
}
public class SkuGroup
{
public long Id { get; set; }
public string Name { get; set; } public ICollection<SkuItem> Items { get; set; } public bool Selected { get; set; } /// <summary>
/// SkuItem数据表类名称
/// </summary>
/// <remarks>例:平台销售属性值为PlatformInfo,平台类目销售属性为PlatformIndustryInfo,版本销售属性为SkuItem</remarks>
public string ItemType { get; set; } public Guid? CategoryId { get; set; }
}
public class SkuItem
{
public long Id { get; set; } public long GroupId { get; set; } public string Name { get; set; } /// <summary>
/// 选中
/// </summary>
public bool Selected { get; set; } public virtual SkuGroup Group { get; set; }
}
使用笛卡尔积生成sku的更多相关文章
- 结合element-ui表格自动生成sku规格列表
		
最近在写一个根据输入的规格,属性值动态生成sku表格,实现的效果大致如图,这是在vue项目里,结合element-UI表格写的,写好了就整理了一下,把代码贴上来,方便以后使用,不过代码里还是有一些重复 ...
 - 动态生成sku组合输入列表
		
<!DOCTYPE html> <html> <head> <title></title> <meta http-equiv=&quo ...
 - 一个商品SKU是怎么生成的
		
首先说一说什么是SKU.......自己百度去... 类似京东上面,未来人类S5这个台笔记本(没错,我刚入手了) 都是S5这个型号,但是因为CPU,显卡,内存,硬盘等不同,价格也不一样.CPU,显卡, ...
 - 商品的spu、sku及其之间的关系
		
今日来总结一下,电商系统中涉及到商品时必然会遇到的几个概念,SPU.SKU.单品等.彻底搞懂和明白了这几个概念对我们设计商品表是十分必要的前提条件. SPU:标准化产品单元 SPU = Standar ...
 - 【知识点】SPU&SKU
		
SPU:标准化产品单元 SPU = Standard Product Unit (标准化产品单元),SPU是商品信息聚合的最小单位,是一组可复用.易检索的标准化信息的集合,该集合描述了一个产品的特性. ...
 - B2C电子商务系统研发——商品SKU分析和设计(二)
		
转:http://www.cnblogs.com/winstonyan/archive/2012/01/07/2315886.html 上文谈到5种商品SKU设计模式,本文将做些细化说明. 笔者研究过 ...
 - B2C电子商务系统研发——商品SKU分析和设计(一)
		
一.SKU及相关概念定义 在设计商品SKU之前,首先让我们熟悉一下SKU和相关的一些概念. # 什么是SKU: SKU=Stock Keeping Unit(库存量单位) 同一型号的商品,或者说是同一 ...
 - 你真的会玩SQL吗?之逻辑查询处理阶段
		
你真的会玩SQL吗?系列目录 你真的会玩SQL吗?之逻辑查询处理阶段 你真的会玩SQL吗?和平大使 内连接.外连接 你真的会玩SQL吗?三范式.数据完整性 你真的会玩SQL吗?查询指定节点及其所有父节 ...
 - 关于join时显示no join predicate的那点事
		
我们偶尔,非常偶尔的情况下会在一个查询计划中看到这样的警告: 大红叉,好吓人啊! 把鼠标放上去一看显示这样的信息 No join predicate 直译过来就是:没有连接谓词 在真实的生产环境下我们 ...
 
随机推荐
- nyoj 56-阶乘因式分解(一)(数学)
			
56-阶乘因式分解(一) 内存限制:64MB 时间限制:3000ms Special Judge: No accepted:15 submit:16 题目描述: 给定两个数m,n,其中m是一个素数. ...
 - 队列+BFS(附vector初试)
			
优先队列的使用: include<queue>//关联头文件 struct node{ int x,y; friend bool operator < (node d1,node d ...
 - 四 linuk常用命令   2. 权限管理命令
			
一 权限管理命令chmod 所有者u 所属组g 其他人o 所有人a 所有者和root超级用户可以更改该权限 普通更改权限是不会改变子目录的权限的,要想改变用递归修改 useradd增加用户 目录的r和 ...
 - Java虚拟机之栈
			
一.程序计数器(寄存器):PCR 作用:记住下一条JVM指令的执行地址. 特点:①线程私有的 ②不会存在内存溢出 二.虚拟机栈 1.定义 虚拟机栈:线程运行所需要的内存空间. 栈帧:一个栈帧对应一个方 ...
 - 2019-9-23:渗透测试,基础学习,http协议数据包的认识,html css的认识,笔记
			
Burp suite功能模块Dashboard:扫描Proxy:拦截包,代理 drop:放弃Intruder:爆破Decoder:编码,解码repeater:重放comparer:比较 BP,prox ...
 - SpringBoot学习(六)—— springboot快速整合RabbitMQ
			
目录 Rabbit MQ消息队列 简介 Rabbit MQ工作模式 交换机模式 引入RabbitMQ队列 代码实战 Rabbit MQ消息队列 @ 简介 优点 erlang开发,并发能力强. 社区活跃 ...
 - ctf线下赛中关闭非法用户shell脚本
			
linux中三类用户:根用户,虚拟用户,普通用户. 其中普通用户的UID一般介于500-6000之间. #!/bin/bash for uid in $( cat /etc/passwd | cut ...
 - 数据表与简单java类映射转换
			
简单的Java类的定义来源于数据表的结构, 例如:雇员信息表.部门信息表描述的就是雇员或部门的信息, 在实际的开发之中,数据表和简单java类之间的映射关系如下: 1. 数据实体表设计 = 类的定义: ...
 - 【Android - 控件】之MD - FloatingActionButton的使用
			
FloatingActionButton(FAB) 是 Android 5.0 新特性——Material Design 中的一个控件,是一种悬浮的按钮. FloatingActionButton 是 ...
 - 高逼格利器之Python闭包与装饰器
			
生活在魔都的小明,终于攒够了首付,在魔都郊区买了一套房子:有一天,小明踩了狗屎,中了一注彩票,得到了20w,小明很是欢喜,于是想干脆用这20万来装修房子吧(decoration): 整个装修过程,小明 ...