使用笛卡尔积生成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 直译过来就是:没有连接谓词 在真实的生产环境下我们 ...
随机推荐
- EFCore批量操作,你真的清楚吗
背景 EntityFramework Core有许多新的特性,其中一个重要特性便是批量操作. 批量操作意味着不需要为每次Insert/Update/Delete操作发送单独的命令,而是在一次SQL请求 ...
- Appium+python自动化(四十二)-Appium自动化测试框架综合实践- 寿终正寝完结篇(超详解)
1.简介 按照上一篇的计划,今天给小伙伴们分享执行测试用例,生成测试报告,以及自动化平台.今天这篇分享讲解完.Appium自动化测试框架就要告一段落了. 2.执行测试用例&报告生成 测试报告, ...
- 微擎签名出错 invalid signature
微擎签名出错 错误信息: config:fail,Error: 系统错误,错误码:63002,invalid signature 修改方法: PHP 端 $account_api = WeAccoun ...
- 队列+BFS (附vector初试)
优先队列的使用: include<queue>//关联头文件 struct node{ int x,y; friend bool operator < (node d1,node d ...
- 【SpringBoot | Swagger】SpringBoot整合Swagger
SpringBoot整合Swagger 1. 什么是Swagger Swagger 是一个规范和完整的框架,用于生成.描述.调用和可视化 RESTful 风格的 Web 服务.简单说就是项目跑起来了, ...
- C# 彻底搞懂async/await
前言 Talk is cheap, Show you the code first! private void button1_Click(object sender, EventArgs e) { ...
- Winform-最大化窗口
设置winform窗体最大化,填满整个屏幕 this.WindowState = FormWindowState.Maximized;
- 【Linux系列】Centos 7安装 Redis(六)
目的 本文主要介绍以下两点: 一. 安装Redis 二. 设置开机启动项 演示 一. 安装Redis 打开Redis官网,右击复制链接. yum install -y gcc # 先更新下编译环境 c ...
- 超速入门AT指令集 | 我的物联网成长记
[摘要] 在物联网中,AT命令集可用于控制&调测设备.通信模块入网等.本文为您介绍NB-IoT常用的AT命令集及其调测工具. 什么是AT指令集 AT命令,用来控制TE(Terminal Equ ...
- Django--导出项目依赖库requirements.txt
虚拟环境下: 1.导出项目依赖库: pip freeze > requirements.txt 2.使用 pip 一次性安装项目的所有依赖项,方法是在命令行中输入: pip install - ...