使用笛卡尔积生成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 直译过来就是:没有连接谓词 在真实的生产环境下我们 ...
随机推荐
- Ubuntu 18 安装搜狗输入法
Ubuntu 18 安装搜狗输入法: 1. 搜狗输入法官网下载对应的Linux输入法 2. 双击 刚刚下载好的 deb 文件 3. 点击 install(安装) 4. 在 settings(系统设置) ...
- 力扣(LeetCode)亲密字符串 个人题解
给定两个由小写字母构成的字符串 A 和 B ,只要我们可以通过交换 A 中的两个字母得到与 B 相等的结果,就返回 true :否则返回 false . 示例 1: 输入: A = "ab& ...
- 从壹开始 [ Design Pattern ] 之二 ║ 单例模式 与 Singleton
前言 这一篇来源我的公众号,如果你没看过,正好直接看看,如果看过了也可以再看看,我稍微修改了一些内容,今天讲解的内容如下: 一.什么是单例模式 [单例模式],英文名称:Singleton Patter ...
- Winform-最大化窗口
设置winform窗体最大化,填满整个屏幕 this.WindowState = FormWindowState.Maximized;
- 达梦"记录超长"警告
出现"记录超长"背景介绍: 导入数据库时,出现数据库记录超长警告,导致数据无法正常导入! 1.重新建库,把页大小改大 这种方式是在建立数据库实例的时候进行的 修改[页大小] 2.把 ...
- 编译k8s1.11 kube-apiserver源码
说明 修改k8s1.11 kube-apiserver源码并构建成镜像,最终替换运行在集群中的kube-apiserver pod来验证本次源码修改 参看链接:https://xinchen.blog ...
- 【Linux系列】Centos7安装Samba并将工作区挂载到win(八)
目的 本文主要介绍以下两点: 一. 安装Samba 二. 挂载到window 演示 一. 安装Samba Samba是基于smb协议的,主要作用是实现跨平台文件传输. 安装 yum install - ...
- /etc/security/limits.conf配置文件详解
这个文件主要是用来限制用户对系统资源的使用.是/lib64/security/pam_limits.so模块对应的/etc/serurity/pam_limits的配置文件. # /etc/secur ...
- IdentityServer4 保护.net framework webapi
一.IS4服务器配置 1.新建一个Asp.net Core MVC程序,模板选择 Empty 2.Nuget添加 IdentityServer4,我这里添加的是2.5.3 3.添加Config文件, ...
- 王院生:Apache APISIX 微服务网关极致性能架构解析
2019 年 10 月 27 日,又拍云联合 Apache APISIX 社区举办 API 网关与高性能服务最佳实践丨Open Talk 杭州站活动,Apache APISIX PPMC 成员王院生做 ...