电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術(shù)文章
文章詳情頁

ASP.NET MVC獲取多級(jí)類別組合下的產(chǎn)品

瀏覽:35日期:2022-06-08 10:34:05

本篇是針對(duì)我在做項(xiàng)目過程中遇到的特定需求而做的一個(gè)Demo, 沒有很大的通用性,讀者酌情可繞行。

標(biāo)題不能完全表達(dá)本意,確切的情景需要展開說。假設(shè)有三級(jí)分類,關(guān)于分類這樣設(shè)計(jì):

    public class Category
    {
public int Id { get; set; }
public string Name { get; set; }
public int ParentId { get; set; }
    }

然后產(chǎn)品可以屬于多個(gè)分類,以下的Categories屬性值是以英文逗號(hào)隔開、由分類編號(hào)拼接而成的字符串。

    public class Product
    {
public int Id { get; set; }
public string Name { get; set; }
public string Categories { get; set; }
    }

由于種種原因,Categories屬性值只是存儲(chǔ)了由第三級(jí)分類編號(hào)拼接而成的字符串。

在前端,需要把分類作為查詢條件來查詢產(chǎn)品,可能只選擇一級(jí)分類,把一個(gè)數(shù)字字符串(比如"1")發(fā)送給服務(wù)端;可能同時(shí)選擇一級(jí)和二級(jí)分類,也把一個(gè)數(shù)字字符串(比如"1,2")發(fā)送給服務(wù)端;當(dāng)然,也有可能同時(shí)選擇一級(jí)、二級(jí)和三級(jí)分類作為查詢條件(比如"1,2,3")。換句話說,如果諸如"1"或"1,2"或"1,2,3"這樣的查詢條件轉(zhuǎn)換成數(shù)組后,如果數(shù)組的每一個(gè)元素都被包含在Product的Categories屬性值轉(zhuǎn)換成的數(shù)組中,那這個(gè)產(chǎn)品就符合搜索條件。

簡(jiǎn)單來說,是這樣:假設(shè)搜索條件是"1,2",Product的Categories屬性值為"1,3,2,5",我們不是判斷"1,2"這個(gè)字符串是否包含在"1,3,2,5"字符串中,而是把"1,2"先split成數(shù)組,叫做array1, 把"1,3,2,5"也split成數(shù)組,叫做array2,最后判斷array1的每個(gè)元素是否都被包含在array2中。

還有一個(gè)問題需要解決:當(dāng)前的Product的Categories屬性值只存儲(chǔ)了所有第三級(jí)分類編號(hào)拼接成的字符串,而前端輸入的搜索條件可能會(huì)包含一級(jí)分類或二級(jí)分類等,所以,我們需要把Product轉(zhuǎn)換一下,希望有一個(gè)類的某個(gè)屬性值能存儲(chǔ)由一級(jí)、二級(jí)、三級(jí)分類拼接而成的字符串。

    public class ProductWithThreeCate
    {
public int Id { get; set; }
public string Name { get; set; }
public string AllCategoreis { get; set; }
    }

以上, AllCategoreis屬性值就用來存儲(chǔ)由一級(jí)、二級(jí)、三級(jí)分類拼接而成的字符串。

有一個(gè)方法獲取所有分類:

static List<Category> GetCategories()
{
    return new List<Category>()
    {
new Category(){Id = 1, Name = "根", ParentId = -1},
new Category(){Id = 2, Name = "一級(jí)分類1",ParentId = 1},
new Category(){Id = 3, Name = "一級(jí)分類2", ParentId = 1},
new Category(){Id = 4, Name = "二級(jí)分類11",ParentId = 2},
new Category(){Id = 5, Name = "二級(jí)分類12",ParentId = 2},
new Category(){Id = 6, Name = "二級(jí)分類21",ParentId = 3},
new Category(){Id = 7, Name = "二級(jí)分類22",ParentId = 3},
new Category(){Id = 8, Name = "三級(jí)分類111",ParentId = 4},
new Category(){Id = 9, Name = "三級(jí)分類112",ParentId = 4},
new Category(){Id = 10, Name = "三級(jí)分類121",ParentId = 5},
new Category(){Id = 11, Name = "三級(jí)分類122",ParentId = 5},
new Category(){Id = 12, Name = "三級(jí)分類211",ParentId = 6},
new Category(){Id = 13, Name = "三級(jí)分類212",ParentId = 6},
new Category(){Id = 14, Name = "三級(jí)分類221",ParentId = 7}
    };
}

有一個(gè)方法獲取所有產(chǎn)品:

static List<Product> GetProducts()
{
    return new List<Product>()
    {
new Product(){Id = 1, Name = "產(chǎn)品1",Categories = "10,12"},
new Product(){Id = 2, Name = "產(chǎn)品2", Categories = "12,13"},
new Product(){Id = 3, Name = "產(chǎn)品3",Categories = "10,11,12"},
new Product(){Id = 4, Name = "產(chǎn)品4",Categories = "13,14"},
new Product(){Id = 5, Name = "產(chǎn)品5",Categories = "11,13,14"}
    };
}

接下來的方法是根據(jù)搜索條件(比如是"1,2")來查找滿足條件的ProductWithThreeCate集合,如下:

/// <summary>
/// 獲取滿足某些條件的集合
/// </summary>
/// <param name="query">以英文逗號(hào)隔開的字符串,比如:2,5</param>
/// <returns></returns>
static List<ProductWithThreeCate> GetResultByQuery(string query)
{
    //最終結(jié)果
    List<ProductWithThreeCate> result = new List<ProductWithThreeCate>();
    //臨時(shí)結(jié)果 此時(shí)ProductWithThreeCat的屬性AllCategoreis包含所有一級(jí)、二級(jí)、三級(jí)分類ID拼接成的字符串
    List<ProductWithThreeCate> tempResult = new List<ProductWithThreeCate>();
    //獲取所有的產(chǎn)品
    List<Product> allProducts = GetProducts();
    //遍歷這些產(chǎn)品
    foreach (var item in allProducts)
    {
ProductWithThreeCate productWithThreeCate = new ProductWithThreeCate();
productWithThreeCate.Id = item.Id;
productWithThreeCate.Name = item.Name;
//所有一級(jí)、二級(jí)、三級(jí)拼接成以英文逗號(hào)隔開的字符串
string temp = string.Empty;
//當(dāng)前產(chǎn)品只包含三級(jí)拼接成的、也是以英文隔開的字符串,split成數(shù)組
string[] theThirdCates = item.Categories.Split(",");
//遍歷這些三級(jí)數(shù)組
foreach (string i in theThirdCates)
{
    //三級(jí)類別轉(zhuǎn)換成整型
    int theThirdInt = int.Parse(i);
    //獲取三級(jí)類別
    Category theThirdCate = GetCategories().Where(c => c.Id == theThirdInt).FirstOrDefault();
    //獲取二級(jí)類別
    Category theSecondCate = GetCategories().Where(c => c.Id == theThirdCate.ParentId).FirstOrDefault();
    //獲取一級(jí)類別
    Category theFirstCate = GetCategories().Where(c => c.Id == theSecondCate.ParentId).FirstOrDefault();
    temp += i + "," + theSecondCate.Id.ToString() + "," + theFirstCate.Id.ToString() + ",";
}
//去掉最后一個(gè)英文逗號(hào)
temp = temp.Substring(0, temp.Length - 1);
//轉(zhuǎn)換成集合,去除重復(fù)項(xiàng),比如不同的三級(jí)可能有相同的一級(jí)或二級(jí)父類
IEnumerable<string> tempArray = temp.Split(",").AsEnumerable().Distinct();
//所有一級(jí)、二級(jí)、三級(jí)拼接成以英文逗號(hào)隔開的字符串,但已經(jīng)去除了重復(fù)的一級(jí)和二級(jí)
string tempagain = string.Empty;
//再次遍歷集合拼接成字符串
foreach (var s in tempArray)
{
    tempagain += s + ",";
}
productWithThreeCate.AllCategoreis = tempagain.Substring(0, tempagain.Length - 1);
tempResult.Add(productWithThreeCate);
    }
    //遍歷臨時(shí)結(jié)果
    foreach (var item in tempResult)
    {
//把當(dāng)前包含一級(jí)、二級(jí)、三級(jí)的,以英文逗號(hào)隔開的字符串split成數(shù)組
string[] itemArray = item.AllCategoreis.Split(",");
//把當(dāng)前查詢字符串split成數(shù)組
string[] queryArray = query.Split(",");
//如果queryArray的每一個(gè)元素都被包含在itemArray中,那就保存起來
if (queryArray.All(x => itemArray.Contains(x)) == true)
{
    result.Add(item);
}
    }
    return result;
}

客戶端的調(diào)用如下:

    List<ProductWithThreeCate> result = GetResultByQuery("2,5");
    //遍歷最終的結(jié)果
    foreach (var item in result)
    {
Console.WriteLine(item.Name+ "  " + item.AllCategoreis);
    }
    Console.ReadKey(); 

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)的支持。如果你想了解更多相關(guān)內(nèi)容請(qǐng)查看下面相關(guān)鏈接

標(biāo)簽: ASP.NET
相關(guān)文章:
主站蜘蛛池模板: 碳纤维复合材料制品生产定制工厂订制厂家-凯夫拉凯芙拉碳纤维手机壳套-碳纤维雪茄盒外壳套-深圳市润大世纪新材料科技有限公司 | 手机游戏_热门软件app下载_好玩的安卓游戏下载基地-吾爱下载站 | 上海深蓝_缠绕机_缠膜机-上海深蓝机械装备有限公司 | 杜康白酒加盟_杜康酒代理_杜康酒招商加盟官网_杜康酒厂加盟总代理—杜康酒神全国运营中心 | 广东护栏厂家-广州护栏网厂家-广东省安麦斯交通设施有限公司 | 烟台条码打印机_烟台条码扫描器_烟台碳带_烟台数据采集终端_烟台斑马打印机-金鹏电子-金鹏电子 | 深圳宣传片制作_产品视频制作_深圳3D动画制作公司_深圳短视频拍摄-深圳市西典映画传媒有限公司 | 英超直播_英超免费在线高清直播_英超视频在线观看无插件-24直播网 | 氟塑料磁力泵-不锈钢离心泵-耐腐蚀化工泵厂家「皖金泵阀」 | 上海单片机培训|重庆曙海培训分支机构—CortexM3+uC/OS培训班,北京linux培训,Windows驱动开发培训|上海IC版图设计,西安linux培训,北京汽车电子EMC培训,ARM培训,MTK培训,Android培训 | 水性漆|墙面漆|木器家具漆|水漆涂料_晨阳水漆官网 | 浙江筋膜枪-按摩仪厂家-制造商-肩颈按摩仪哪家好-温州市合喜电子科技有限公司 | 紧急切断阀_气动切断阀_不锈钢阀门_截止阀_球阀_蝶阀_闸阀-上海上兆阀门制造有限公司 | 岸电电源-60HZ变频电源-大功率变频电源-济南诚雅电子科技有限公司 | 印刷人才网 印刷、包装、造纸,中国80%的印刷企业人才招聘选印刷人才网! | 变频器维修公司_plc维修_伺服驱动器维修_工控机维修 - 夫唯科技 变位机,焊接变位机,焊接变位器,小型变位机,小型焊接变位机-济南上弘机电设备有限公司 | 自清洗过滤器,浅层砂过滤器,叠片过滤器厂家-新乡市宇清净化 | 深圳市万色印象美业有限公司 | 气弹簧定制-气动杆-可控气弹簧-不锈钢阻尼器-工业气弹簧-可调节气弹簧厂家-常州巨腾气弹簧供应商 | 东莞市海宝机械有限公司-不锈钢分选机-硅胶橡胶-生活垃圾-涡电流-静电-金属-矿石分选机 | 威客电竞(vk·game)·电子竞技赛事官网| 深圳激光打标机_激光打标机_激光焊接机_激光切割机_同体激光打标机-深圳市创想激光科技有限公司 深圳快餐店设计-餐饮设计公司-餐饮空间品牌全案设计-深圳市勤蜂装饰工程 | 东莞爱加真空科技有限公司-进口真空镀膜机|真空镀膜设备|Polycold维修厂家 | 上海单片机培训|重庆曙海培训分支机构—CortexM3+uC/OS培训班,北京linux培训,Windows驱动开发培训|上海IC版图设计,西安linux培训,北京汽车电子EMC培训,ARM培训,MTK培训,Android培训 | 购买舔盐、舔砖、矿物质盐压块机,鱼饵、鱼饲料压块机--请到杜甫机械 | 真空包装机-诸城市坤泰食品机械有限公司 | 铝箔-铝板-花纹铝板-铝型材-铝棒管-上海百亚金属材料有限公司 | 金属波纹补偿器厂家_不锈钢膨胀节价格_非金属伸缩节定制-庆达补偿器 | 智能型高压核相仪-自动开口闪点测试仪-QJ41A电雷管测试仪|上海妙定 | 河南道路标志牌_交通路标牌_交通标志牌厂家-郑州路畅交通 | 芜湖厨房设备_芜湖商用厨具_芜湖厨具设备-芜湖鑫环厨具有限公司 控显科技 - 工控一体机、工业显示器、工业平板电脑源头厂家 | 陕西华春网络科技股份有限公司 | 高通量组织研磨仪-多样品组织研磨仪-全自动组织研磨仪-研磨者科技(广州)有限公司 | 颚式破碎机,圆锥破碎机,制砂机-新乡市德诚机电制造有限公司 | 踏板力计,制动仪,非接触多功能速度仪,逆反射系数测试仪-创宇 | 2025世界机器人大会_IC China_半导体展_集成电路博览会_智能制造展览网 | 昆明化妆培训-纹绣美甲-美容美牙培训-昆明博澜培训学校 | 细砂提取机,隔膜板框泥浆污泥压滤机,螺旋洗砂机设备,轮式洗砂机械,机制砂,圆锥颚式反击式破碎机,振动筛,滚筒筛,喂料机- 上海重睿环保设备有限公司 | 上海皓越真空设备有限公司官网-真空炉-真空热压烧结炉-sps放电等离子烧结炉 | 点胶机_点胶阀_自动点胶机_智能点胶机_喷胶机_点胶机厂家【欧力克斯】 | 骨密度仪-骨密度测定仪-超声骨密度仪-骨龄测定仪-天津开发区圣鸿医疗器械有限公司 |